天天看点

cocos2dx3.3开发FlappyBird总结十六:游戏层实现

游戏有三种状态,准备开始、游戏中、游戏结束,定义一个枚举来表示:

游戏层与控制层需要通信,因此要遵守代理协议:

代理协议只有一个方法,就是点击屏幕事件监听回调:

游戏层还需要与状态层通信,因此需要接收一个代理:

把状态层对象作为代理传到游戏层,就可以二者通信了。

下面看下初始化方法,这个是很重要的,添加物理特性,并监听触碰事件:

要想让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坐标,来判断小鸟是否通过了水管。

当通过后,又把水管设置为已经通过的水管,如此重复使用。