2016-08-07 9 views
3

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

Другими словами, как рассчитать максимальные и минимальные X-координаты размера сцены и, что еще важнее, как узнать, что представляет собой текущий размер сцены, в зависимости от того, на каком iPhone работает игра?

+0

Вы должны объяснить модель вашей игры, вы планируете иметь больше сцен увидеть больше игровой площадки, или сделать вы ожидаете, что изображения станут больше на более крупных устройствах. – Knight0fDragon

+0

@ Knight0fDragon изображения должны увеличиваться на больших устройствах. –

ответ

0

Не изменять размер сцены в зависимости от iPhone модели, оставьте Sprite-кит сделать этот вид работы:

scene.scaleMode = SKSceneScaleMode.ResizeFill 

Сцена не масштабируется в соответствии с видом. Вместо этого, сцена будет автоматически изменена, так что ее размеры всегда совпадают с размерами .

О размере, когда сцена сначала инициализируется, его свойство size настроено назначенным инициализатором. Размер сцены определяет размер видимой части сцены в точках. Это используется только для указания видимой части сцены.


Update, чтобы помочь вам в позиционировании:

Если вы хотите установить свои позиции вместо того, чтобы использовать ScaleMode вы можете установить ваш scene.scaleMode в .AspectFill для этого, чтобы работать на всех сценах и размер сцены должен быть 2048x1536 или 1536x2048. Это сделает его масштабируемым и для iPad.

class StartScene: SKScene { 
    let playableArea: CGRect! 
} 

override init(size: CGSize) { 

    //1. Get the aspect ratio of the device 
    let deviceWidth = UIScreen.mainScreen().bounds.width 
    let deviceHeight = UIScreen.mainScreen().bounds.height 
    let maxAspectRatio: CGFloat = deviceWidth/deviceHeight 
    //2. For landscape orientation, use this 
    let playableHeight = size.width/maxAspectRatio 
    let playableMargin = (size.height - playableHeight)/2.0 
    playableArea = CGRect(x: 0, y: playableMargin, width: size.width, height: playableHeight) 

    //3. For portrait orientation, use this 
    let playableWidth = size.height/maxAspectRatio 
    let playableMargin = (size.width - playableWidth)/2.0 
    playableArea = CGRect(x: playableMargin, y: 0, width: playableWidth, height: size.height) 

    super.init(size: size) 
} 

Таким образом, вы можете позиционировать свой объект с:

ball.position = CGPoint(x: CGRectGetMidX(playableArea), y: CGRectGetMaxY(playableArea) - (ball.size.height * 0.90)) 

Этот код работает в iPhone 4S, 5, 5S, 6, 6 Plus, 6S, 6S Plus и IPADS.

Если вы хотите, чтобы ваши границы (для отладки или нет):

func drawWorkArea() { 
    let shape = SKShapeNode() 
    let path = CGPathCreateMutable() 
    CGPathAddRect(path, nil, workArea) 
    shape.path = path 
    shape.strokeColor = SKColor.redColor() 
    shape.lineWidth = 8 
    addChild(shape) 
} 
+0

Проблема, с которой я столкнулся, заключается не в изменении размера представления при изменении версии iPhone. Речь идет о позиционировании моих врагов, когда я их создаю. Они иногда выходят из краев или остаются наполовину и наполовину. Проблема, с которой я столкнулась, - это рассчитать диапазон х-координаций, на которые им разрешено появляться –

+0

Например, если ваше развитие на iPhone 6S и экране выглядит идеально, я бы разделил размер кадра на желаемую ширину экрана. Это даст вам поплавок, который будет равен коэффициенту экрана. Поэтому, если пользователь использует меньшее устройство, float будет 0.XX против более крупного устройства X.XX. IPhone 6S будет равен 1,00. Затем вы умножаете размер изображения, скорость, расстояние и т. Д. По коэффициенту. –

+0

Я теряю вас о той части, где вы объясняете вычисления. не могли бы вы рассказать мне в терминах кода? то, что я делал, это установить минимальное значение x и максимальное значение x. my min = screen.size.width/6 и max = screen.size.width.затем я выбирал случайное значение между этими границами. –