最近一個月硬是啃下了Swift和SpriteKit,回首這一個月,有垂頭喪氣,也有得意忘形,但是遇到最多的,還是無助和無奈。眾所周知,SpriteKit推出只有一年的時間,雖然蘋果文件一直非常堅挺,但是SK和cocos、unity的普及程度、受歡迎程度和易用程度還有很大的距離,所以使用的人也很少。且不說國內資料鳳毛麟角,國外相關教程和資料也不是很多,即便找到了,也只能教你如何做小物件和簡單的功能,當你遇到自己個性化的需求或者技術問題,就倍感無助了(如果結合Swift語言,就更少的可憐了)。因此,就最近一個月的學習經歷,整理出一些常見的問題,希望能幫助到同樣在學習的人,節選自我的為知筆記。
座標系
直接上程式碼
var pipePair = SKNode()
var pipeUp:SKSpriteNode = SKSpriteNode(texture: pipeUpTexture)
pipeUp.position = CGPointMake(0, y + pipeUp.size.height)
pipePair.addChild(pipeUp)
上面這段程式碼仿照swift版flappy bird原始碼所寫。座標系是非常常用也非常重要的一個概念。我們經常會需要新增大量節點到遊戲場景中,如何妥善管理各個節點的座標和從屬關係就非常重要。
以上面程式碼來說,建立了一個SKNode節點pipePair,用來攜帶一對水管(這裡我只新增了一個向上的水管),然後把水管新增到pipePair上。如果我們直接建立兩個水管,需要設定兩次座標,兩次向左平移動作(細節參見SKAction.moveByX()
)。如果設定一個父節點,用來攜帶這兩個水管,那麼只需要設定父節點的左平移動作,父節點會帶著子節點一起向左移動,就像你提著兩個水桶走路一樣,大大簡化了引數設定,子節點不需要設定任何動作就可以和父節點同步運動。不光如此,這樣還簡化了子節點的座標設定。
The position of the node in its parent’s coordinate system.
紅字部分摘自蘋果文件,子節點的座標是相對父節點來設定的(父節點座標系原點,預設在父節點的正中心,父節點座標系中心可以通過archor錨點屬性來設定),也就是說,如果水管加到pipePair上,將pipePair設定成在螢幕中央,由右向左移動,那麼子節點只需要設定Y座標,一個在上面,一個在下面,就可以了。
是不是大大激發了你的想象力?坦克上帶的炮塔,飛機上帶的航炮,英雄手裡的武器,汽車上的車燈都是可以這樣設定的,能做的東西真是太多了。
注意:
如果父節點被移除,子節點也會被移除。所以坦克打出的炮彈,不能add到坦克節點上,否則坦克消失,炮彈也會立即消失。後面我會詳細說節點的用法