鹅厂程序猿:使用Swift+SpriteKit编写2048_最新动态_新闻资讯_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 新闻资讯 > 最新动态 > 鹅厂程序猿:使用Swift+SpriteKit编写2048

鹅厂程序猿:使用Swift+SpriteKit编写2048

 2014/7/4 15:11:08    程序员俱乐部  我要评论(0)
  • 摘要:作者:cyan腾讯TEG移动应用部工程师6月3日,苹果WWDC14大会召开后,鹅厂的程序猿们不能淡定了。接连出现各种讨论苹果新动向的帖子,这不,一位程序猿GG本着心动不如行动的态度,埋头用Swift和SpriteKit写了2048的程序,被QGQM们称赞“深圳速度”和“碉堡了”。不懂代码的小编,此次仅扮演大自然的搬运工的角色,纯属复制粘贴,只为了让程序猿们好好欣赏代码之美
  • 标签:程序 使用
class="topic_img" alt=""/>

  作者: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 不也是一样的情况么?不过我觉得苹果做这么一件事情不会是玩玩而已,具体情况就拭目以待吧,反正多学点东西也并不吃亏。

发表评论
用户名: 匿名