cocos2d-x游戏开发 跑酷(四) 关联物理世界
2014-03-18 14:03
267 查看
原创,转载注明出处http://blog.csdn.net/dawn_moon/article/details/21451077
前面一节虽然实现了一个跑动的人物,但是他仅仅只是一个精灵在执行一个跑动的帧动画而已。这一节我要实现精灵和物理世界关联,让这个人跟实际的Parkour一样,有实际体积,会碰撞。
一个精灵怎么样和一个物理的body关联起来,使他具有一个刚体的特性。在cocos2d-x box2d 入门这篇文章里面,我有简单讲了一下。有人说将一个body的userData设为精灵就可以了,其实这是不够的。body的userData是一个void型指针,用来存放用户自定义数据。如果仅仅这样赋值一下,你会发现,精灵和刚体是分开运动的。这个userData是为了存放精灵,在后续位置迭代的时候方便取出这个精灵,然后将它和刚体的位置同步。看cocos2d-x
box2d 入门里面的update函数,就知道还需要做位置迭代的。
为了方便,我把引擎自带的物理精灵CCPhysicsSprite改了一下,去掉了chipmunk的代码,保留了box2d的接口。这个就是一个box2d的物理精灵B2Sprite。
然后将Runner里面的成员变量mRunner类型改成B2Sprite,其创建函数也要修改为
然后跑起来就看到一个带碰撞区域的精灵
前面一节虽然实现了一个跑动的人物,但是他仅仅只是一个精灵在执行一个跑动的帧动画而已。这一节我要实现精灵和物理世界关联,让这个人跟实际的Parkour一样,有实际体积,会碰撞。
一个精灵怎么样和一个物理的body关联起来,使他具有一个刚体的特性。在cocos2d-x box2d 入门这篇文章里面,我有简单讲了一下。有人说将一个body的userData设为精灵就可以了,其实这是不够的。body的userData是一个void型指针,用来存放用户自定义数据。如果仅仅这样赋值一下,你会发现,精灵和刚体是分开运动的。这个userData是为了存放精灵,在后续位置迭代的时候方便取出这个精灵,然后将它和刚体的位置同步。看cocos2d-x
box2d 入门里面的update函数,就知道还需要做位置迭代的。
为了方便,我把引擎自带的物理精灵CCPhysicsSprite改了一下,去掉了chipmunk的代码,保留了box2d的接口。这个就是一个box2d的物理精灵B2Sprite。
然后将Runner里面的成员变量mRunner类型改成B2Sprite,其创建函数也要修改为
mRunner = B2Sprite::createWithSpriteFrameName(runner0); mRunnerSize = mRunner->getContentSize();然后实现initBody()和initShape()函数
void Runner::initBody() { b2BodyDef bodyDef; bodyDef.type = b2_dynamicBody; // 初始速度1.5 bodyDef.linearVelocity = b2Vec2(1.5, 0); bodyDef.position = b2Vec2(getOffsetPx() / RATIO, (GROUND_HEIGHT + mRunnerSize.height / 2 )/ RATIO); mBody = mWorld->CreateBody(&bodyDef); // 关联起来 mRunner->setB2Body(mBody); mRunner->setPTMRatio(RATIO); } void Runner::initShape() { b2PolygonShape shape; // 定义runner的形状,一个box,参数是半宽高 shape.SetAsBox(mRunnerSize.width / 2 / RATIO, mRunnerSize.height / 2 / RATIO); b2FixtureDef fixDef; fixDef.shape = &shape; mBody->CreateFixture(&fixDef); }
然后跑起来就看到一个带碰撞区域的精灵
相关文章推荐
- cocos2d-x游戏开发 跑酷(四) 关联物理世界
- cocos2d-x游戏开发 跑酷(四) 关联与物理世界
- cocos2d-x游戏开发 跑酷(二) 物理世界
- cocos2d-x游戏开发 跑酷(两) 物理世界
- cocos2d-x游戏开发 跑酷(二) 物理世界
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植5:初始化物理世界【Chipmunk】
- Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检测
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(1)
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
- cocos2d-x游戏开发 跑酷(五) 跳起和下蹲动作 手势识别
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
- [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
- cocos2d-x游戏开发 跑酷(七) 添加金币和岩石
- 【cocos2d-x IOS游戏开发-城市跑酷6】添加街区元素:墙、屋顶、烟囱
- cocos2d-x游戏开发 跑酷(六) 地图循环
- cocos2d-x游戏开发 跑酷(七) 添加金币和岩石
- 【cocos2d-x IOS游戏开发-城市跑酷19】游戏效果图及资源引用页
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十七课:Cocos2D-X物理引擎之chipmunk
- cocos2d-x游戏开发 跑酷(三) 人物跑动