本文实践自 Allen Tan 的文章《How To Make A Side-Scrolling Beat ‘Em Up Game Like Scott Pilgrim with Cocos2D – Part 1》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.0.4进行学习和移植。在这篇文章,将会学习到如何制作一个简单的横版格斗过关游戏。在这当中,学习如何跟踪动画状态、碰撞盒、添加方向键、添加简单敌人AI和更多其它的。
步骤如下:
1.新建Xcode工程,工程名为"PompaDroid",去除"Box2D"选项,勾选"Simple Audio Engine in Cocos Denshion"选项;
2.添加游戏场景类GameScene,派生自CCScene类。添加GameLayer类和HudLayer类,派生自CCLayer类。删除HelloWorldScene.h和HelloWorldScene.cpp文件。
3.HudLayer类增加一个方法:
1
|
CREATE_FUNC(HudLayer);
|
和GameLayer类增加一个方法:
1
|
CREATE_FUNC(GameLayer);
|
4.文件GameScene.h代码如下:
#include "cocos2d.h"
#include "GameLayer.h"
#include "HudLayer.h"
USING_NS_CC;
class GameScene:public CCScene
{
public:
//构造函数
GameScene();
//析构函数
~GameScene();
virtual bool init();
CREATE_FUNC(GameScene);
//利用cocos2d-x中的宏定义实现Get和Set方法
CC_SYNTHESIZE(GameLayer*, _gameLayer, GameLayer);
CC_SYNTHESIZE(HudLayer*, _hudLayer, HudLayer);
};
文件GameScene.cpp代码如下:
GameScene::GameScene(void)
{
//在构造函数中将指针置空防止野指针
_gameLayer = NULL;
_hudLayer = NULL;
}
GameScene::~GameScene(void)
{
}
bool GameScene::init()
{
bool bRet = false;
do
{
CC_BREAK_IF(!CCScene::init());
//初始化游戏层
_gameLayer = GameLayer::create();
//将该层加在0的位置数越小越在下面
this->addChild(_gameLayer,0);
//初始化游戏的虚拟手柄层
_hudLayer = HudLayer::create();
//将该层加在1的位置1比0大,所以手柄层在游戏层的上面
this->addChild(_hudLayer,1);
bRet = true;
} while (0);
return bRet;
}
5.修改AppDelegate.cpp文件,代码如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
//#include "HelloWorldScene.h" #include "GameScene.h" bool AppDelegate::applicationDidFinishLaunching() { //... // create a scene. it's an autorelease object //CCScene *pScene = HelloWorld::scene(); CCScene *pScene = GameScene::create(); //... } |
6.编译运行,此时只是空空的界面。
7.下载本游戏所需资源,将资源放置"Resources"目录下;
8.用Tiled工具打开pd_tilemap.tmx,就可以看到游戏的整个地图:
地图上有两个图层:Wall和Floor,即墙和地板。去掉每个图层前的打钩,可以查看层的组成。你会发现下数第四行是由两个图层一起组成的。每个tile都是32x32大小。可行走的地板tile位于下数三行。
9.打开GameLayer.h文件,添加如下代码&#