引言
做消消乐Demo属于一个意外,本想借助学习iOS游戏开发把CoreAnimation学好,并完成第一个游戏Demo:俄罗斯方块。却在这过程中发现了一些实现消消乐的小技巧,于是兴起完成了这个小Demo,供大家参考。
当然,这个Demo不是平白无故产生的,笔者也是参考了一些资料,其中就包括斯坦福大学的iOS公开课,这里放上百度云的链接(含字幕):Dynamic Animation。视频是用swift讲的,笔者从视频中获取了帮助和灵感,大家英语好的话也可以尝试学习一下。
本文将会讲解如何实现这个消消乐小游戏,相信你一定会有所收获。
项目地址
Cubee Game
欢迎一切fork,issue,pull request来帮助该项目做得更好。
效果演示
如下图,和大多数消消乐一样,Demo根据颜色,进行垂直,水平以及两个斜向的三消。用户可以上下左右自由交换两个方块的位置。
消消乐Demo效果
基本思路
先讲解一下基本思路。主要分如下几个部分:
首先,大家可以看到这个消消乐需要一些动画,以及一些诸如碰撞和重力下落等物理特性的支持。
其次,我们需要能够正确计算出三消,并以美观的动画样式将其消除。
接着,我们需要响应用户的移动方块的操作,实现方块位置的调换。
最后,我们添加一些美化效果。
物理特性及其对应的动画
很显然,物理特性实现的好坏,直接关系到消消乐游戏的体验。在Demo中笔者使用了UIDynamicAnimator和UIDynamicBehavior这两个基于UIKit的类来进行管理。
通过UIDynamicAnimator来实现各种物理特性发生时的动画,如下落加速动画和碰撞反弹动画。而其中涉及的物理特性则使用UIDynamicBehavior。
KMAnimatorManager
动画管理器:KMAnimatorManager继承自UIDynamicAnimator,用来管理各种物理特性对应的动画效果。它会关联到一个UIView,这个UIView是我们动画展现的场所,之后所有的物理特性和动画显示都在这个view上进行。如下:
_animator = [[KMAnimatorManager alloc] initW