声明:文章代码参考自子龙山人的撞球小游戏,链接地址在文章结尾
4月1日接触了Box2d,开始了物理引擎学习之路,这次要求的实现比较简单,就是实现多个(例子中2个)物体的堆叠,鼠标拖动和简单碰撞。
init函数
首先是类中添加成员函数及数据,世界,边框,2个paddle,鼠标关节,响应触屏事件
b2World *_world;
b2Body *_groundBody;
b2Fixture *_bottomFixture;
b2Body *_paddleBody;
b2Fixture *_paddleFixture;
b2Body *_paddleBody2;
b2Fixture *_paddleFixture2;
b2MouseJoint *_mouseJoint;
voidccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
voidccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
voidccTouchesEnded(CCSet* pTouches, CCEvent* pEvent);
voidupdate(ccTime dt);
然后是init函数,前面和HelloWorld中的一样,只不过去掉了背景图和label,
需要说明的是:1.我的cocos2d-x是3月初下的版本,还算比较新,和网上啊书中的教程中的很多接口已经不同了,比如生成世界的方法。
2.小满的教程中有对Box2d的研究,我有参考他的实现,书上的setAsEdge方法已经被删除了,只能用setAsBox,此函数参数说明:1,2参数分别是要生成的对象的长度和宽的的1半,拿bottom来说我要生成长度为程序窗口的长度,所以用窗口长度除以2,
3参是生成的对象的位置中心,我的边界的参考点是(0,0),所以bottom设置在如下位置,4参是旋转角度。
CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
b2Vec2 gravity = b2Vec2(0.0f, -10.0f); //老师要求是实现物体堆叠 那么还是加上重力吧
booldoSleep =true;
_world = newb2World(gravity);//新版本很多方法都改参数了