Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植5:初始化物理世界【Chipmunk】
2013-12-17 20:10
597 查看
尊重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/17382737
<捕鱼达人>回顾
【cocos2d-x
IOS游戏开发-捕鱼达人1】内容介绍
<城市跑酷>回顾
【cocos2d-x
IOS游戏开发-城市跑酷1】跑酷游戏介绍
上节回顾
Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植4:游戏主场景的介绍
PlayLayer是PlayScene最重要的层。这层处理玩家输入,碰撞检测,物体运动等等。
# 初始化物理世界,让runner“跑”起来。
## why physics engine? why chipmunk?
物理引擎能让跑酷的跳起落下过程看起来更加证实。物理引擎里面包含了重力计算以及碰撞检测等。
Cocos2d-x支持的物理引擎有 Box2d 和 [Chipmunk](http://chipmunk-physics.net/).
chipmunk支持的能力要比Box2d多一些,这篇教程使用chipmunk来构建物理世界。
##开始创建chipmunk
加入头文件
新建一个文件globals.h, 后面我们将用来存放一些全局变量或定义。
## chipmunk的初始化
打开 PlayScene.h, 加入新成员变量
```
// chipmunk space定义类成员
cpSpace* space;
```
整个游戏中只会用到一个物理空间,它将被PlayScene中的其它layer使用到。
所用它的初始化放在PlayScene.h是一个比较理想的位置。
在添加其他layer之前我们需要初始化好space,新加入了一个成员函数initPhysics。
```
//使用Chipmunk2D物理引擎。Cocos2d-x种有两套Chipmunk JSB API。
//一个是面向对象的,另一个是面向过程的。我们使用更加友好的面向对象接口
```
gravity设置系统的重力,SegmentShape第一个参数用的space的staticBody来创建一个static的shape,
然后加入到space中,static的shape不受重力影响。
通过创建一个无限长的地面,runner将跑在上面。
启动“update”方法,update()方法每帧被调用。
我们在这里调用chipmunk setp方法是物理世界动起来
为了加载PlayScene, 我们需要打开”MainScene.cpp”, 添加下面的代码:
用下面的代码替换onPlay的实现:
调试并运行,点击“Play”按钮,屏幕将会显示一片黑。在下一章我们将添加些东西。
<捕鱼达人>回顾
【cocos2d-x
IOS游戏开发-捕鱼达人1】内容介绍
<城市跑酷>回顾
【cocos2d-x
IOS游戏开发-城市跑酷1】跑酷游戏介绍
上节回顾
Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植4:游戏主场景的介绍
PlayLayer是PlayScene最重要的层。这层处理玩家输入,碰撞检测,物体运动等等。
# 初始化物理世界,让runner“跑”起来。
## why physics engine? why chipmunk?
物理引擎能让跑酷的跳起落下过程看起来更加证实。物理引擎里面包含了重力计算以及碰撞检测等。
Cocos2d-x支持的物理引擎有 Box2d 和 [Chipmunk](http://chipmunk-physics.net/).
chipmunk支持的能力要比Box2d多一些,这篇教程使用chipmunk来构建物理世界。
##开始创建chipmunk
加入头文件
新建一个文件globals.h, 后面我们将用来存放一些全局变量或定义。
#define g_groundHight 57 #define g_runnerStartX 80
## chipmunk的初始化
打开 PlayScene.h, 加入新成员变量
```
// chipmunk space定义类成员
cpSpace* space;
```
整个游戏中只会用到一个物理空间,它将被PlayScene中的其它layer使用到。
所用它的初始化放在PlayScene.h是一个比较理想的位置。
在添加其他layer之前我们需要初始化好space,新加入了一个成员函数initPhysics。
```
//使用Chipmunk2D物理引擎。Cocos2d-x种有两套Chipmunk JSB API。
//一个是面向对象的,另一个是面向过程的。我们使用更加友好的面向对象接口
void PlayScene::initPhysics() { //面向对象的chipmunk API,用来创建一个物理世界 space = cpSpaceNew(); //设置物理世界的重力 space->gravity = cpv(0, -350); //set up Walls //跑酷所用的地面,chipmunk中使用静态形状来描述。从物理空间新建一个静态SegmentShape,然后将它添加到物理空间 // // rogue shapes // We have to free them manually // // bottom cpShape *wallBottom = cpSegmentShapeNew( space->staticBody, cpv(0,g_groundHight),// start point cpv(4294967295, g_groundHight), // MAX INT:4294967295 0.0f);// thickness of wall cpSpaceAddStaticShape(space, wallBottom); }
```
gravity设置系统的重力,SegmentShape第一个参数用的space的staticBody来创建一个static的shape,
然后加入到space中,static的shape不受重力影响。
通过创建一个无限长的地面,runner将跑在上面。
启动“update”方法,update()方法每帧被调用。
我们在这里调用chipmunk setp方法是物理世界动起来
为了加载PlayScene, 我们需要打开”MainScene.cpp”, 添加下面的代码:
用下面的代码替换onPlay的实现:
void MainScene::onPlay(CCObject* pSender) { CCLOG("Start a new game!!!"); CCScene *playScene = PlayScene::scene(); //加载PlayScene CCDirector::sharedDirector()->replaceScene(playScene); }
调试并运行,点击“Play”按钮,屏幕将会显示一片黑。在下一章我们将添加些东西。
相关文章推荐
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植4:游戏主场景的介绍
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植7:Gesture Recognizer【手势识别】
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植1:环境搭建及Parkour介绍
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植11:添加金币和障碍物到地图中
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植2:如何新建一个项目,引擎目录结构介绍
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植10:Adding Coins and Rocks【添加金币和障碍物】
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植8: Jumping and Crouching
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植3:游戏主菜单界面的实现
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植6:Running This Way
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植9:Map Loop【地图循环加载】
- Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
- Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
- cocos2d-x游戏开发 跑酷(两) 物理世界
- cocos2d-x游戏开发 跑酷(四) 关联物理世界
- cocos2d-x游戏开发 跑酷(四) 关联物理世界
- cocos2d-x游戏开发 跑酷(四) 关联与物理世界
- 别碰钉子 cocos2d js 版本,即将上线,此游戏充分利手cocos2d js 的chipmunk物理引擎开发...
- cocos2d-x游戏开发 跑酷(二) 物理世界
- cocos2d-x游戏开发 跑酷(二) 物理世界
- 使用cocos2d-js-3.0RC1中的物理引擎chipmunk模拟的“别碰钉子”源码分享(含碰撞检测)