使用Swift+SpriteKit編寫2048
不懂代碼的小編,此次僅扮演大自然的搬運工的角色,純屬復制粘貼,只為了讓程序猿們好好欣賞代碼之美。
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