2016-12-26 6 views
2

Я новичок в SpriteKit, и я слежу за учебником, который позиционирует SpritekitNode в центре в нижней части экрана в портретном режиме, но независимо от кода, который я использую, мой объект не принимает позицию, как обсуждалось в руководство. Я просмотрел пару других учебников, и они почти то же самое относятся к коду, который позиционирует SpriteKitNode.Почему моя позиция SpriteKitNode не отображается правильно?

Это единственный код, который я имею в GameScene.swift:

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 

    var player:SKSpriteNode! 

    override func didMove(to view: SKView) { 

     player = SKSpriteNode(imageNamed: "Spaceship") 
     player.xScale = 0.5 
     player.yScale = 0.5 

     player.position = CGPoint(x: self.frame.size.width/2, y: player.size.height/2 + 20) 

     self.addChild(player) 
    } 

    override func update(_ currentTime: TimeInterval) { 
     // Called before each frame is rendered 
    } 
} 

Я не добавил ничего GameScene.sks или какие-либо изменения в еще info.plist с указанным кодом, mySpriteKitNode отображается на правый центр экрана, как показано на рисунке ниже. Космический корабль должен быть расположен рядом с красным X.

Spaceship should be positioned near the red X

Я посмотрел на несколько пост относительно проблем с позиционированием в SpriteKit, но не нашел решение для этого.

Если кто-нибудь может объяснить, что именно я делаю неправильно? Спасибо

ответ

4

Это происходит потому, что учебник, за которым вы следуете, вероятно устарел. Раньше, когда сцена загружалась из файла sks, у него было anchorPoint, установленное на 0,0. Теперь по умолчанию установлено значение 0.5, 0.5.

Таким образом, вы можете использовать ваш текущий код, но точки привязки набора сцены к 0.0, 0.0, или оставить сцены anchorPoint, как это и установлено игрок position свойства соответственно:

//player.position.x should be 0 which is middle of the screen 
player.position.y = -frame.size.height/2.0 + player.size.height/2.0 + 20.0