Я ковыряюсь в SpriteKit и обнаруживаю некоторую странность, например, я просто добавляю прямоугольный SKShapeNode
, который должен быть полноэкранным на iPhone.
override func didMoveToView(view: SKView) {
let _box = SKShapeNode(rectOfSize: self.frame.size)
_box.strokeColor = SKColor.blueColor()
_box.fillColor = SKColor.blueColor()
_box.position = CGPointMake(200, 200)
_box.name = "box"
self.addChild(_box)
let _player = SKShapeNode(circleOfRadius: 50)
_player.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
_player.fillColor = SKColor.redColor()
_player.strokeColor = SKColor.redColor()
_player.name = "player"
_player.physicsBody = SKPhysicsBody(circleOfRadius: 50)
_player.physicsBody?.dynamic = true
_player.physicsBody?.allowsRotation = false
self.addChild(_player)
let _ground = SKShapeNode(rectOfSize: CGSizeMake(self.frame.width, 20))
_ground.name = "ground"
_ground.position = CGPointMake(0, 0)
_ground.fillColor = SKColor.greenColor()
_ground.strokeColor = SKColor.greenColor()
_ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.width, 20))
_ground.physicsBody?.dynamic = false
self.addChild(_ground)
}
Мои представления инициализируются таким образом, чтобы переопределить func viewDidLoad () {super.viewDidLoad ()}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
// Configure the view.
let skView = self.view as SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
Результирующая сцена выглядит так: снимок экрана
Все узлы смещены влево-вниз. В основном левый нижний угол прямоугольных фигур находится за пределами границ (я проверил это, поместив синюю фигуру в (200, 200) вместо (0, 0) - и края левого дна все еще выходили за рамки экрана.
Точка привязки для сцены установлена на (0, 0), поэтому в основном мне кажется, что она устанавливает положение для центральной точки формы.
Как лучше всего определить положение левого нижнего угла узла вместо средней точки?