效果图:
首先在实体筛选器中创建“怪物筛选器”,然后在“怪物筛选器”下新建一个类,命名为Monster。
Monster.h的代码如下:
Monster一共声明了4个函数,1个变量,分别介绍如下: (1)show函数:由于怪物是不断出现,然后不断消失的(碰到主角就消失),为了避免频繁“new”对象,怪物消失时只是暂时隐藏,而不进行销毁,该函数用于显示怪物。 (2)hide 函数 :如上所述,该函数用于隐藏怪物。 (3)reset函数:怪物从出现到碰撞玩家后消失,其间可能改变了一些属性,该函数用于重置怪物属性,恢复初始状态,以便下次使用。 (4)isAlive函数:判断怪物是否在活动状态(及调用了show函数,处于显示状态)。
Monster.cpp代码:
如今怪物已经有了,怎么让它出现呢?我们要再写一个怪物管理器。 先创建一个”管理器筛选器“,在这筛选器下再建一个“怪物管理器筛选器”,如图:
在怪物管理器筛选器下新建一个类,命名为MonsterManager,先来看看头文件代码:
怪物管理器就是用来创建怪物、判断怪物什么时候出现、什么时候隐藏,再来看看MonsterManager.cpp文件:
目前MonsterManager只做了一件事情,就是创建若干个怪物对象,保存到列表中
我们要介绍一个新的类:CCArray。CCArray是Cocos2d-x封装的一个类,使用列表的方式存放一组对象,也就是我们常用的列表容器
这里要提醒一下,Cocos2d-x类的成员变量在创建后还要调用retain函数,否则可能会导致程序崩溃,关于retain的内容,我们将在后续内容讨论
创建怪物的方式和创建主角的方式一样,也是绑定一个CCSprite对象给怪物即可。
因为,怪物的初始坐标(在reset()里面设置的)在屏幕之外,因此在怪物管理器中还要添加一个功能,那就是不断改变怪物的坐标,这个功能就是上面的MonsterManager.cpp中的update函数。 这里要介绍一个宏:CCARRAY_FOREACH,这个宏是用来遍历CCArray的,第一个参数是CCArray对象,第二个参数是存放遍历值得对象,第二个参数是存放遍历值的对象,取得遍历值后,我们还要进行类型转换。 再来看看update函数做了什么: (1)判断怪物是否处于活动状态,如果不是,则调用怪物的show函数,让怪物出场 (2)如果怪物已经处于活动状态。则让怪物的X坐标减少4个像素,这样怪物就相当于向左移动了。如果怪物的X坐标小于0,则表示怪物超出屏幕范围,调用hide函数,隐藏怪物。
现在,我们在TollgateScene.cpp的init函数最后添加几句代码,让怪物管理器生效,如下代码:
接下来按Ctrl+F5运行项目,就可以看到效果图了