赞
踩
cocos2d-x里有两个物理引擎分别是box2d和chipmunk(金花鼠,不知道为什么叫这名字……),如果想看看基础的常识及这两个物理引擎的区别请到以下网址:http://bsr1983.iteye.com/blog/1672032 其实本人的物理知识也都快忘记光了……只能一点点补了……
这两个物理引擎可以构建一个属于自己的物理世界,而这个物理世界是基于现实中的物理特性建立的,所以能赋予在这个世界中的对象(即“刚体”,在任何力的作用下,体积和形状都不发生改变的物体叫做“刚体”(Rigid body))现实中的物理属性如重量、密度、摩擦力……因此也可以模拟现实中的物理运动特性如惯性、弹性、阻力……
游戏中常用这样的物理引擎来检测碰撞,即用来检测两个或者多个刚体在一定作用力下相互接触及接触后所产生的相互作用(影响)。当然,其实很多时候只是单纯地检测是否产生了碰撞事件……因此很少去设定碰撞后产生的实际物理作用。
检测碰撞时需要为刚体定义一个shape用来作为碰撞检测的基础轮廓,当两个图形轮廓产生接触时就会产生碰撞事件……
在官方原例中用的chipmunk比较直接的反映了精灵刚体的碰撞事件及作用,但是精灵并非刚体,在写程序时是将精灵与生成的物理世界中的刚体相关联,而后将实现的碰撞效应反馈给精灵。这里是一篇对chipmunk的使用介绍:http://article.ityran.com/archives/3313
在写涉及到物理引擎chipmunk的程序时需要需要在预处理器里定义CC_ENABLE_CHIPMUNK_INTEGRATION=1,步骤是:右击项目->属性->C/C++->预处理器->预处理器定义->添加前面说的参数。下面是官方原例中的代码:
- class HelloWorld : public cocos2d::CCLayer
- {
- public:
- HelloWorld();
- ~HelloWorld();
- // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
- virtual bool init();
-
- // there's no 'id' in cpp, so we recommand to return the exactly class pointer
- static cocos2d::CCScene* scene();
-
- // a selector callback
- void menuCloseCallback(CCObject* pSender);
-
- void onEnter();
- //初始化物理系统
- void initPhysics();
- //在触屏的位置添加精灵
- void addNewSpriteAtPosition(cocos2d::CCPoint p);
- //精灵与刚体的更新事件
- void update(float dt);
- //程序运行的模式定义菜单
- void toggleDebugCallback(CCObject* pSender);
- //触屏事件
- virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
- //重力感应,功能开启后用于根据手机晃动的三维坐标来计算重力加速度
- virtual void didAccelerate(cocos2d::CCAcceleration* pAccelerationValue);
-
- private:
- //精灵纹理
- cocos2d::CCTexture2D* m_pSpriteTexture; // weak ref
- #if CC_ENABLE_CHIPMUNK_INTEGRATION
- //调试节点
- CCPhysicsDebugNode* m_pDebugLayer; // weak ref
- #endif
- //物理世界(空间)
- cpSpace* m_pSpace; // strong ref
- //刚体形状定义
- cpShape* m_pWalls[4];
- // implement the "static node()" method manually
- CREATE_FUNC(HelloWorld);
- };
- //获取可视区的位置参数
- class VisibleRect
- {
- public:
- static cocos2d::CCRect getVisibleRect();
-
- static cocos2d::CCPoint left();
- static cocos2d::CCPoint right();
- static cocos2d::CCPoint top();
- static cocos2d::CCPoint bottom();
- static cocos2d::CCPoint center();
- static cocos2d::CCPoint leftTop();
- static cocos2d::CCPoint rightTop();
- static cocos2d::CCPoint leftBottom();
- static cocos2d::CCPoint rightBottom();
- private:
- static void lazyInit();
- static cocos2d::CCRec
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。