在游戏中,很多怪物本身是会移动的,这里主要有蘑菇怪,乌龟等. 说起怪物的移动,首先在游戏里先要考虑怪物的抽象和设计. 在CMMonster.h中,有个类CMMonsterBasic,这个类抽象了所有的怪物,具体的怪物都是它的派生类,比如CMMonsterMushrooms蘑菇怪. CMMonsterBasic继承自CCNode和CMSender,所以怪物都是渲染对象,并且有消息发送功能. 怪物基本类的接口: virtual bool init(CCPoint ptMonsterPos,CMMar…
在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMushrooms::OnCollisionMario() { do { CCNode* pMushrooms = dynamic_cast<CCNode*>(getChildByTag(enTagMainNode)); CC_BREAK_IF(pMushrooms==NULL); //马里奥与蘑菇怪的…
背景 在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap 头文件 class CMGameMap : public cocos2d::CCTMXTiledMap ,public CMReceiver { protected: enum { enTagMario = 998, //通过这个Tag查找Mario }; protected: CCArray *m_pArrayItems;…
背景 在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene 头文件 class CMGameScene : public cocos2d::CCLayer,public CMReceiver { public: // there's no 'id' in cpp, so we recommend returning the class instance pointer static cocos2d::CCScene* CreateGameScene(); pr…
在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑,这个时候需要有一个机制,让马里奥通知地图对象,去处理这个游戏逻辑,这种通知机制,在cocos2dx中并没有提供.在马里奥游戏里,提供了这个机制,我认为值得好好学习. 一般说来,由于地图对象包含了所有的游戏元素,在面向对象设计时,地图类应该包容所有的游戏元素对象.由于游戏元素对象需要通知地图类,所以…
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类的重载函数applicationDidFinishLaunching函数中,程序进入CMMenuScene场景,我们顺藤摸瓜来学习CMMenuScene. 类定义头文件 class CMMenuScene : public cocos2d::CCLayerColor { private: bool…
马里奥在平移的过程中,涉及到地图的卷动问题. 在这个游戏里,地图比窗口大,窗口只是显示了地图的一部分,因此马里奥在移动的时候,移动到一定位置之后要卷动地图,否则马里奥移动到窗口右边之后......那结果将会很难看. 卷动地图的原理在于,将地图的放在窗口的位置变化下.如下图所示…
在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的 w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢? 普通的windows程序,在按键之后,会有个win32消息发送到应用程序,但是cocos2dx里,没有用这个机制,而是在帧刷新函数中,主动去获取按键状态 根据状态来对马里奥进行处理. 帧刷新函数是在CMGameScene类中注册的,还记得CMGameScene么,它是游戏场景,但是游戏逻辑在它的子对象CMGameMap中…
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到在CCApplication::run()函数中,调用虚函数applicationDidFinishLaunching,将初始化的控制权留给开发者. 如何实现,为什么要这么实现呢? 如何实现:虚函数重载 实现的方法就是开发者从CCApplication继承一个类,这个类在创建工程模板生成的工程里叫做AppDelegate 这个A…
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家是否已经搭建好环境,让马里奥运行起来呢? 代码结构 本文主要的目标是让大家粗略了解马里奥的代码结构,以方便后续的学习.…