首先去下载box2d中文版教程,看大概。很多时候,这个是给予你一个大体的概念,然后再去细化写代码。
上手为一个完整的游戏,超级玛丽。出自泰然论坛,使用的是oc来写的,改造过来用C++重写。
首先一个为重点DebugDraw
1 cocos2d中testcpp->box2dTestBed文件夹,下面有GLES-Render.h/GLES-Render.cpp,这两个文件先要拷到你的项目中
2 在你的helloworldscene.h中创建 GLESDebugDraw *m_DebugDraw 对象 再写个 void draw()方法
3 在helloworldscene.cpp中 init()函数里:
//PTM_RATIO是box2d中单位米和像素转换比率 #define PTM_RATIO 32
m_DebugDraw = new GLESDebugDraw(PTM_RATIO);
//m_World 是世界对象
m_World->SetDebugDraw(m_DebugDraw);
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
m_DebugDraw->SetFlags(flags);
draw();
4 在helloworldscene.cpp中 定义刚写的void draw()方法
void HelloWorld::draw()
{
CCLayer::draw();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
kmGLPushMatrix();
m_World->DrawDebugData();//这个是一定要写的 其他几句不知道啥意思 看别人代码抄的
kmGLPopMatrix();
CHECK_GL_ERROR_DEBUG();
}
最后将地图的z轴设置为-2,因为draw是加在层的draw中。
2.
固定旋转(Fixed Rotation)
你可能想一个刚体,比如某个角色,具有固定的旋转角。这样物体即使在负载下,也不会旋转。 你可以设置fixedRotation来达到这目的:
bodyDef.fixedRotation = true;
4.对于SimpleDPad类,使用了委托模式。意味着一个委托类(并非SimpleDPad),将会处理由被委托类(SimpleDPad)启动的任务。在某些你指定的点上,主要是当涉及到处理任何游戏相关的东西,SimpleDPad将会将职责传递给委托类。这使得SimpleDPad无需知道任何游戏逻辑,从而允许你在开发任何其他游戏时,可以进行重用。如下图所示:
http://blog.csdn.net/akof1314/article/details/8549150