游戏有三种状态,准备开始、游戏中、游戏结束,定义一个枚举来表示:
游戏层与控制层需要通信,因此要遵守代理协议:
代理协议只有一个方法,就是点击屏幕事件监听回调:
游戏层还需要与状态层通信,因此需要接收一个代理:
把状态层对象作为代理传到游戏层,就可以二者通信了。
下面看下初始化方法,这个是很重要的,添加物理特性,并监听触碰事件:
要想让a和b能够在相碰时,发出事件,规则如下:
// if body->getcategorybitmask() & groundbody->getcontacttestbitmask() == 1
// then we can listen the physics touch event, otherwise not.
要想让a和b能够发生冲突并发出事件,规则如下:
//
// if body->getcategorybitmask() & groundbody->getcollisionbitmask() == 1
// then the bird and the ground can collide, otherwise not.
如果不添加,默认情况下是不会监听到的,刚开始我就遇到此问题,然后通过百度才明白原因。
下面是创建场景,需要把背景层、控制层、状态层、游戏层添加到场景中:
添加水管,给水管也添加物理特性,就可以让小鸟与水管在接触时,发出相碰事件
小鸟通过水管检测:
通过遍历所有水管,如果当前是显示在屏幕上新的水管,再判断与小鸟的x坐标,来判断小鸟是否通过了水管。
当通过后,又把水管设置为已经通过的水管,如此重复使用。