2017-04-23 45 views
2

我剛剛開始研究Swift 3 - 從未編碼過,所以我完全不熟悉這一切。一直在尋找一個真正的基本節點教程,並有下面的代碼:Swift 3中的節點定位問題

class GameScene: SKScene { 

    override func didMove(to view: SKView) { 

     // SKLabelNode 
     var exampleLabelNode = SKLabelNode(fontNamed: "Helvetica") 
     exampleLabelNode.text = "Example Label Node!" 
     exampleLabelNode.fontSize = 30 
     exampleLabelNode.fontColor = SKColor.white 
     exampleLabelNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 0.75) 
     self.addChild(exampleLabelNode) 

     // SKSpriteNode 
     var exampleSpriteNode = SKSpriteNode(imageNamed: "myImage") 
     exampleSpriteNode.size = CGSize(width: 180, height: 180) 
     exampleSpriteNode.anchorPoint = CGPoint(x: 0.5, y: 0.5) 
     exampleSpriteNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height * 0.25) 
     exampleSpriteNode.zPosition = 100 
     exampleSpriteNode.name = "exampleName" 
     self.addChild(exampleSpriteNode) 

    } 

} 

這意味着要定位exampleLabelNode在屏幕的頂部中心和3/4 exampleSpriteNode 1/4在底部屏幕。

然而其定位exampleSpriteNode 3/4到屏幕和一半的頂部關閉以與exampleLabelNode右定位在屏幕上。

本教程適用於Swift 2,Swift 3的定位語法等不同嗎?

回答

2

這是因爲默認場景anchorPoint是(0.5,0.5)意思是場景的中心。這也是任何節點的默認anchorPoint。這使得點(x:0,y:0)位於場景的中心。

我建議您閱讀更多關於此的信息,或者如果您遇到問題,請提出問題以獲得更好的理解。

蘋果官方文檔

SKSpriteNode anchorPoint

SKScene anchorPoint

注:爲SKScene該文檔是不正確時,它說的默認值是(0,0)。

爲了解決您的問題,您可以將此行添加到您的didMove(to view)的開頭:

self.anchorPoint = CGPoint(x: 0, y: 0) 

這臺現場anchorPoint現場的左下角,這曾經是怎麼回事(該教程已過時)。

或者,您現在可以重做精靈放置,知道anchorPoint的工作原理。我建議這樣做是因爲我發現從中心向外而不是從左下角構建場景時,構建遊戲更容易。

+0

我想的行: 'exampleSpriteNode.anchorPoint = CGPoint(X:0.5,Y:0.5)' 是定位時它來設置exampleSpriteNode的中心點。 所以我正確地認爲通過使用屏幕的中心作爲默認x:0,y:0而不是左下角來進行定位? – Bootfit

+0

@Bootfit就是這樣。 'anchorPoint'是所有節點(包括場景)都擁有的屬性。它決定節點的哪一部分是中心。你剛纔編寫的例子更改爲節點的anchorPoint,因爲它以'exampleSpriteNode.anchorPoint = ...'開頭。我的例子改變了場景(self),因爲它開始於'self.anchorPoint = ...' – Nik

+0

@Bootfit我不明白你在問什麼,但是添加了這行嗎? – Nik