Cocos2d-x 游戏实例教程跑跑跑2:让主角动起来

2015年03月22日 08:44 0 点赞 0 评论 更新于 2017-05-06 17:40

在完成项目创建,并且有了地图和游戏主角之后,接下来我们要想办法让游戏主角动起来。

为主角添加跑步动画

为了让主角跑起来,我们需要先给主角添加一个动画。首先,为 Player 类添加一个 run() 函数。实现该函数后,运行项目,此时可以看到主角在原地跑起来了。

run() 函数实现

(此处应补充 run() 函数的具体代码)

让主角向前跑起来——添加角色控制器

我们采用组合的方式来实现让主角向前跑,将向前跑这一功能单独封装在一个类中,主角只需增加一个该类的成员变量,就能实现向前跑的动作,这个类就是控制器。

创建控制器的父类

先在“控制器筛选器”下新建 Controller.hController.cpp 文件。

Controller.h

(此处应补充 Controller.h 的具体代码)

Controller.cpp

(此处应补充 Controller.cpp 的具体代码)

这个类比较简单,只有一个变量和一个方法。下面我们来了解一下 ControllerListener 的作用。ControllerListener 代表的是将要被控制的对象,例如主角,只要继承了 ControllerListener 接口,就能够被控制器控制。

ControllerListener 代码实现

在“控制器筛选器”下创建 ControllerListener.h 头文件,代码如下:

(此处应补充 ControllerListener.h 的具体代码)

ControllerListener 只需要头文件,不需要 cpp 文件。它定义了两个虚函数,用于设置和获取被控制对象的坐标。

带着它就能跑——主角移动控制器

接下来,我们要实现第一个控制器,即控制物体只向前移动的控制器。在“控制器筛选器”下再创建一个筛选器,命名为“简单移动控制器”,在该筛选器下新建一个类,命名为 SimpleMoveController

SimpleMoveController 类实现

SimpleMoveController.h

(此处应补充 SimpleMoveController.h 的具体代码)

SimpleMoveController.cpp

(此处应补充 SimpleMoveController.cpp 的具体代码)

SimpleMoveController 继承了 Controller 类,它拥有一个成员变量 m_iSpeed,用于设置移动速度。

update(float dt) 函数详解

这里再次详细介绍一下 update(float dt) 函数。update 函数是 CCNode 节点的函数,其作用十分强大。我们知道,游戏的画面是通过一帧帧绘制形成丰富多彩的世界的,程序只需要在每一帧里执行操作、绘制图形。update 函数提供了一个入口,让我们可以在游戏的每一帧里执行自己想要做的事情。

float dt 参数的含义如下:由于 CPU 资源有限,不可能让所有 update 函数同时执行,只能依次执行,因此总会有函数先被调用,有函数后被调用。float dt 参数记录了某个 update 函数从最后一次被调用到本次调用时经过的毫秒数。虽然这个参数非常有用,但在当前阶段我们暂不深入探讨。

修改 Entity

接下来,我们需要对 Entity 类进行一些修改。

Entity.h

(此处应补充 Entity.h 修改后的具体代码)

Entity.cpp

(此处应补充 Entity.cpp 修改后的具体代码)

我们让 Entity 类继承了 ControllerListener 父类,因为我们的角色需要作为被控制器控制的对象。另外,我们为 Entity 类新增了一个 setController 方法,用于绑定一个控制器。

绑定控制器

最后,我们打开 TollgateScene.cppaddPlayer 函数,在该函数的最后添加一段代码:

(此处应补充添加的代码)

添加完代码后,运行项目,主角就可以跑起来了!

作者信息

boke

boke

共发布了 1025 篇文章