使用Swift+SpriteKit編寫2048

jopen 11年前發布 | 42K 次閱讀 Swift Apple Swift開發

作者:cyan 騰訊TEG移動應用部 工程師


6月3日,蘋果WWDC14大會召開后,鵝廠的程序猿們不能淡定了。接連出現各種討論蘋果新動向的帖子,這不,一位程序猿GG本著心動不如行動的態度,埋頭 用Swift和SpriteKit寫了 2048的程序,被QGQM們稱贊“深圳速度”和“碉堡了”。

 

不懂代碼的小編,此次僅扮演大自然的搬運工的角色,純屬復制粘貼,只為了讓程序猿們好好欣賞代碼之美。

 

WWDC2014上最讓開發者興奮不已的就是新公開的4000個API和Swift編程語言了吧。有了他們我們可以在蘋果提供的生態系統中更方便的做更多事情,碼農做應該做第一個吃螃蟹的人,去擁抱變化,所以我在swift發布后興奮不已,夜不能寐的把他過了一遍。


對待一門新技術我的流程是:
1) 把它大體上瀏覽一遍;
2) 用它做一個簡單東西取悅一下自己;
3) 深入到他的一些細節里面;
4) 做更多復雜的東西。


最后效果是這個樣子的:

 

 

這 篇文章不會去講一些Swift的語法細節,只是大概提到一下Swift一些另類的地方以及如何把Swift跟原有的CocoaTouch框架結合起來開發 一個新紀元的iOS app。關于語法的介紹在蘋果開發者網站上是非常詳細的,請參考這本The Swift Programming Languange,也可以看一些網上的翻譯教程。然后在開發者觀望找到一些如何把Swift和CocoaTouch結合起來的的sample code,就可以開工了。

首先用Xcode6新建一個Game項目,語言選Swift:

 

 

 

注意這里選SpriteKit,SceneKit是一個全新的框架,他和Metal融合起來,是OpenGL之外的另一個選擇。

 

然后在入口controller刪除多余的代碼(示例代碼是一個3D的方塊),加載主游戲場景。

 

 

大體流程是:

MainScene是主游戲場景,實現了界面布局和手勢操作的響應。

Chessboard封裝了對棋盤上發生的事情,例如移動以及合并。

ChessNode封裝了棋子的特征,以及一些動畫效果。

所以流程分幾步走:

1、在MainScene實現布局,這一點幾乎和之前oc的版本完全一樣。


objc版本

Swift版本

 

從 這里可以看到objc和swift的一些區別,中括號語法全部變成了點語法,從語法層面上看,你能看到JavaScript/Python/Java的一 些影子,這個見仁見智。之前的一些框架已經被完全的用swift重寫了(從這一點還是可以看出蘋果的誠意的)。有objc經驗的開發者能猜到如何從 objc轉換到swift上來,對于熟悉script類型語言的開發者也可以很快的上手,可以完全不用objc寫出iOS/Mac應用,但熟悉Cocoa 框架是不可避免的。


但值得一提的是Xcode6目前的狀況非常糟糕,代碼提示能力很堪憂,所以有些接口只能追蹤到各個swift類里面去看,這一點如果蘋果不解決是非常可怕的。

 

2、接下來我們就用類似的方法實現了ChessNode里面的全部邏輯。


objc版本在上一個帖子看(小編注:點擊文章最后的“閱讀原文”即可查看前一篇文章)

 

Swift版本


3、下面實現Chessboard里面關于手勢的操作,只是提到和之前那個項目截然不同的一點,那就是棋子存儲結構變了。


以我目前的了解來看,swift似乎沒有數組的支持,集合類array的底層實現不得而知,不過我猜它可能是鏈式結構實現的,因為當緯度是2的時候檢索起來已經有壓力了,所以我覺得他應該不是可以隨機訪問的(不能O(1))。

 

這里做了一個改動就是把每個棋子起一個名字再放到棋盤中,取的時候用名字拿出來,雖然不及之前那種實現來的方便,不過也不是特別麻煩。

 

 

要獲得第i行第j列的棋子的時候從父節點里面拿到:

 

處理棋子的邏輯在此:

 

自此,objc版本完全移植到了swift,swift之旅第一站到此結束。


總結:Swift 是一個很值得嘗鮮的東西,他有很多語法糖,或者說短期內他就是objc的一個語法糖。現在學習他確實是一個比較合適的契機,也許很多web開發者也是這么 想的。他并不完善,可以看到有很多東西他還是不能完全的在自己的體系內完成,即便他把整個CocoaTouch都做了一次重新封裝。在可預見的短期內會掀 起一個學習的熱潮,會成為其他平臺開發者了解蘋果的一個機會。長期內是否會打敗objc其實要看蘋果的熱情,如果蘋果推動他就成功,否則就是曇花一 現,objc不也是一樣的情況么?不過我覺得蘋果做這么一件事情不會是玩玩而已,具體情況就拭目以待吧,反正多學點東西也并不吃虧。

來自:http://djt.qq.com/article/view/1194

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!