Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)
2014-06-03 11:50
477 查看
好久都没写文章了,就来一篇吧。这种方法是在制作《胖鸟大冒险》时用到的。《胖鸟大冒险》中使用Box2D来进行物理模拟和碰撞检測,因此对每一个机关须要创建一个b2body。然后《胖鸟》是依据《超级马里奥兄弟》设计的,所以机关能够是各种运动轨迹的平台,绕圈转的乌龟,蹦蹦跳的乌龟等。假设用box2d来做这些运动的话要自己写这些轨迹。可是Cocos2d-x已经提供了非常多的action,自己添加action也非常方便。反过来用sprite去设置box2d的b2body的位置就非常方便了。
要求:全部的机关都设置为body type为b2_kinematicBody,这个type的优点是能够有速度,可是不会物理模拟,而且能够和type为b2_dynamicBody的body发生碰撞检測。
如果我们用一个反复移动的平台机关为sprPlatform,这个平台反复上下移动,代码例如以下:
然后在sprPlatform的update里设置b2body的属性
至于gPlatformMovingFactor,在《胖鸟》里为1.066681。由于b2_kinematicBody仅仅有速度没有质量,所以仅仅能依据某段时间内body移动了多少像素来计算这个数据。总之达到sprite的移动和b2body的移动匹配。b2_kinematicBody假设没有velocity的话,b2_dynamicBody就无法被platform带动。
另外须要注意的是b2body的anchor point是(0.5,0.5),而cocos2dx的sprite能够自己设置,所以须要自己做些简单的转换。
这样b2body就被sprite带动了。
要求:全部的机关都设置为body type为b2_kinematicBody,这个type的优点是能够有速度,可是不会物理模拟,而且能够和type为b2_dynamicBody的body发生碰撞检測。
如果我们用一个反复移动的平台机关为sprPlatform,这个平台反复上下移动,代码例如以下:
sprPlatform->runAction(CCRepeatForever::create(CCSequence::create(CCMoveBy::create(2, ccp(0, 100)), CCMoveBy::create(2, ccp(0, -100)), NULL)));
然后在sprPlatform的update里设置b2body的属性
void update(float delta) { //更新位置 float angle = getRotation(); CCPoint curPos = getPosition(); b2Vec2 shapeCenter(curPos.x/PTM_RATIO, curPos.y/PTM_RATIO); body->SetTransform(shapeCenter, CC_DEGREES_TO_RADIANS(360-angle) ); //更新速度,这个是为了让机关保持匀速 body->SetLinearVelocity(b2Vec2((curPos.x-lastPos.x)/gPlatformMovingFactor, (curPos.y-lastPos.y)/gPlatformMovingFactor)); lastPos = curPos; }
至于gPlatformMovingFactor,在《胖鸟》里为1.066681。由于b2_kinematicBody仅仅有速度没有质量,所以仅仅能依据某段时间内body移动了多少像素来计算这个数据。总之达到sprite的移动和b2body的移动匹配。b2_kinematicBody假设没有velocity的话,b2_dynamicBody就无法被platform带动。
另外须要注意的是b2body的anchor point是(0.5,0.5),而cocos2dx的sprite能够自己设置,所以须要自己做些简单的转换。
这样b2body就被sprite带动了。
相关文章推荐
- Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)
- Cocos2d-x中由sprite来驱动Box2D的body运动(用来制作平台游戏中多变的机关)
- <cocos2d-x for wp7>使用cocos2d-x和BOX2D来制作一个BreakOut(打砖块)游戏(一)
- 分享使用Box2D和Cocos2D制作弹球游戏的方法
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第1部分
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第3部分
- 使用cocos2d和box2d制作一个简单的弹射游戏 第一部分
- <cocos2d-x for wp7>使用cocos2d-x和BOX2D来制作一个BreakOut(打砖块)游戏(二)
- 8.如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分
- box2d初级教程之一cocos2d box2d 制作弹球游戏
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第1部分
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第2部分
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第2部分
- 7.如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分
- <cocos2d-x for wp7>使用cocos2d-x和BOX2D来制作一个BreakOut(打砖块)游戏(二)
- Cocos2d-x加Box2D制作弹弓类游戏
- Cocos2d-x加Box2D制作弹弓类游戏
- (译)如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分(完)
- (译)使用cocos2d和box2d制作简单的platformer游戏
- 使用cocos2d和box2d来制作一个Breakout游戏:第二部分