2015-04-22 6 views
0

Я пытаюсь позиционировать простой черный ящик для использования в качестве ссылки для моих элементов HUD для игры. Но расположение его всегда действительно выключено, в основном y-позиция коробки. Я попытался расположить свой ящик hud, чтобы быть на самой верхней части экрана и вскрыть всю ширину, но CGRectGetMaxY (screenSize) позиционирует его в самом низу экрана.SpriteKit Swift Positioning HUD

var hudLayer = SKSpriteNode(color: SKColor.blackColor(), size: CGSizeMake(self.size.width, 200)) 
      hudLayer.anchorPoint = CGPointMake(0, 1) 
      hudLayer.position = CGPointMake(CGRectGetMinX(screenSize), CGRectGetMaxY(screenSize)) 
      hudLayer.zPosition = 100 
      self.addChild(hudLayer) 

Как мне удалось установить координату максимума в самом низу? Я недоумеваю и пробовал другие методы y-позиционирования (self.size.height). До сих пор мне приходилось умножать CGRectGetMaxY (screenSize) на 3,6, чтобы получить его на первое место, но я бы предпочел не делать этого.

Любое объяснение относительно того, почему мои координаты y невероятно прочь? Я установил опорную точку, поэтому он должен использовать верхний левый угол для позиционирования. Другая проблема заключается в том, что я не могу сделать это так же на 4s. На симуляторе 4s панель hud появляется намного ниже, несмотря на использование screenSize для вычисления относительного положения.

Спасибо.

+0

Посмотрите на этот вопрос, на вопрос о iPad и iPhone, но ваша проблема может быть одинаковой. http://stackoverflow.com/questions/29451131/spritekit-coordinates-differ-between-ipad-and-iphone/29451330#29451330 – ABakerSmith

+0

Как говорили другие, похоже, что ваша сцена масштабируется. Чтобы исправить это, см. Здесь http://stackoverflow.com/a/25256339/2158465. Но если вы хотите, чтобы ваша сцена масштабировалась так, как вам нужно будет размещать узлы относительно представления, см. Здесь http://stackoverflow.com/a/29171224/2158465 –

+0

Эта вторая ссылка на самом деле наиболее важна для моего потому что я также установил разрешение в начале, кроме моего, в ландшафтном представлении. Благодаря! – Tyxc

ответ

1

Ваша проблема звучит как ваш размер SKScene - это не то же самое, что и ваш размер SKView. Чтобы исправить это, вы должны установить размер и масштаб режим вашей сцены:

scene.scaleMode = .AspectFill 
scene.size = skView.bounds.size 

Проще всего установить это, вероятно, в вашем GameViewController, когда вы настраиваете свой SKScene. В качестве альтернативы, вы можете установить это в методе didMoveToView, в своем SKScene.

+0

О, ничего себе. Мне никогда не приходило в голову, что это может быть проблемой, я всегда, хотя она была автоматически рассчитана. Благодаря! Я попробую это сейчас! – Tyxc

+0

Да, размер вашей сцены будет таким, каким вы его установили в файле .sks сцены. Возможно, ваша проблема будет заключаться в том, что они исправят в будущем, но в настоящее время спрайт-набор не поддерживает разные размеры экрана, как это делает UIKit. – ABakerSmith

+0

Я только что изменил его в своем GameViewController, и теперь все раздувается из пропорции. Я посмотрю, должен ли я просто масштабировать все в моем коде. Надеюсь, это сработает! – Tyxc