2016-07-07 1 views
0

У меня проблемы с открытием моей игры в разных подразделениях, в 6s iphone plus выглядит намного больше круга центра, а также небольшого круга, который находится на линии, меняет положение, мне хотелось бы, чтобы круг центра был одного размера и что маленький круг всегда эта половина на линии.Как масштабироваться на одинаковом расстоянии на всех устройствах?

import SpriteKit 


struct Circle { 
var position:CGPoint 
var radius:CGFloat 
} 

class GameScene: SKScene { 
let node = SKNode() 
let sprite = SKShapeNode(circleOfRadius: 6) 
var rotation:CGFloat = CGFloat(M_PI) 
var circles:[Circle] = [] 
var circuloFondo = SKSpriteNode() 
var orbita = SKSpriteNode() 

let padding2:CGFloat = 26.0 
let padding3:CGFloat = 33.5 

let padding5:CGFloat = 285.5 
var circulo = SKSpriteNode() 
override func didMoveToView(view: SKView) { 
scaleMode = .ResizeFill 

    backgroundColor = UIColor(red: 0.3, green: 0.65, blue: 0.9, alpha: 1) 

orbita = SKSpriteNode(imageNamed: "orbita2") 
orbita.size = CGSize(width:view.frame.size.width - padding2 , height: view.frame.size.width - padding2) 
orbita.color = UIColor.whiteColor() 
orbita.colorBlendFactor = 1 
orbita.alpha = 1 
orbita.position = view.center 
self.addChild(orbita) 
orbita.zPosition = 3 


circuloFondo = SKSpriteNode(imageNamed: "circuloFondo") 
circuloFondo.size = CGSize(width:view.frame.size.width - padding5 , height: view.frame.size.width - padding5) 
circuloFondo.color = UIColor.whiteColor() 
circuloFondo.alpha = 1 
circuloFondo.position = view.center 
self.addChild(circuloFondo) 
circuloFondo.zPosition = 0 

    let radius1:CGFloat = (view.frame.size.width - padding3)/2 - 1 
    let radius2:CGFloat = (view.frame.size.width - padding5)/2 + 6.5 

circles.append(Circle(position: view.center, radius: radius1)) 
circles.append(Circle(position: view.center, radius: radius2)) 
addChild(node) 


node.addChild(sprite) 
if let circle = nextCircle() { 
node.position = circle.position 
sprite.fillColor = SKColor.whiteColor() 
sprite.zPosition = 4.0 
sprite.position = CGPoint(x:circle.radius, y:0) 
rotate() 
} 

enter image description here

enter image description here

+0

Пожалуйста, сделайте свой вопрос понятным, это довольно запутанно. –

+0

Я рекомендую вам проверить мой ответ, чтобы избежать причинения себе головных болей в будущем. – crashoverride777

ответ

2

Вы можете получить ширину экрана, как это:

let screenSize: CGRect = UIScreen.mainScreen().bounds 
let screenWidth = screenSize.width 

, а затем установить элементы в вашем пользовательском интерфейсе быть доля screenWidth. Например:

let radius1:CGFloat = screenWidth/4 
//this would always give you a radius that is one quarter of the screen width 

Я использовал этот метод несколько раз с успехом, надеюсь, что он сработает для вас.

+0

спасибо, Крис, ты рок! – Alex

0

Ваша основная проблема заключается в том, что для вашего режима сцены установлен ResizeFill. Это вызовет у вас столько головных болей, как вам придется делать все масштабирование самостоятельно, поэтому круги разных размеров на разных устройствах. Если режим масштабирования scaleizeFill будет также влиять на такие вещи, как физический движок или fontSizes, которые вам нужно настроить для каждого устройства.

Я бы порекомендовал вам использовать режим масштаба сцены .AspectFill с размером сцены по умолчанию 1024 * 768 (пейзаж) или 768 * 1024 (портрет). Это то же самое, что и шаблон игры по умолчанию xCode.

Таким образом, все будет выглядеть точно так же на всех iPhone. На iPads будет немного больше пространства экрана сверху и снизу, которое вы просто накрываете своим фоном. Главный трюк заключается в том, что вы размещаете свои вещи из центра.

Кроме того, вы можете использовать универсальные активы в каталоге активов, и все будет выглядеть великолепно, а не размыто.

Единственное, что вам, возможно, придется настроить таким образом, это то, что на iPads вам может понадобиться переместить несколько кнопок вверх/вниз, если вы хотите, чтобы они находились на верхнем/нижнем краю.

Я настоятельно рекомендую вам рассмотреть это, поскольку я могу говорить из опыта, что использование режима масштабирования ResizeFill действительно плохо. Я пережил эту боль с помощью двух игр, прежде чем переписал их, потому что они были настолько непоследовательны на всех устройствах, что вызывало у меня столько ошибок в процессе. Давайте не будем говорить о времени, которое я потратил на тестирование на всех устройствах, корректируя значения до тех пор, пока это не станет правильным.

Надеюсь, это поможет.

Смежные вопросы