objective-c创建box2d世界以及地面(或者 edge)
2011-08-13 17:29
267 查看
// 值得注意的是都要除以一个 PTM_RATIO 才能得到精确定制的地面尺寸~ - (void) createGround { // 边界设置如果采用的是地面盒的话,groudBody 的位置要居中 // 如果采用的是 Edge 的话,groundBody 的位置必须为左下角即为 (0.0f, 0.0f) 这个点~ // *************************** 第一种选择:创建地面盒 **************************** b2BodyDef groundBodyDef; groundBodyDef.position.Set(160.0f/PTM_RATIO, -5.0f/PTM_RATIO); // 设置位置 b2Body *groundBody = _world->CreateBody(&groundBodyDef); b2PolygonShape groundBox; groundBox.SetAsBox(160.0f/PTM_RATIO, 5.0f/PTM_RATIO); groundBody->CreateFixture(&groundBox, 0.0f); // *************************** 第二种选择:创建上下左右的四个 Edge~ ****************** // b2BodyDef groundBodyDef; // groundBodyDef.position.Set(0.0f, 0.0f); // 设置位置 // b2Body *groundBody = _world->CreateBody(&groundBodyDef); // // b2PolygonShape shape; // // b2FixtureDef sd; // sd.shape = &shape; // sd.density = 0.0f; // sd.restitution = 0.4f; // Edge 的弹性如何~ // // // Left vertical // shape.SetAsEdge(b2Vec2(5.0f/PTM_RATIO, 5.0f/PTM_RATIO), b2Vec2(5.0f/PTM_RATIO, 475.0f/PTM_RATIO)); // groundBody->CreateFixture(&sd); // // // Right vertical // shape.SetAsEdge(b2Vec2(315.0f/PTM_RATIO, 5.0f/PTM_RATIO), b2Vec2(315.0f/PTM_RATIO, 475.0f/PTM_RATIO)); // groundBody->CreateFixture(&sd); // // // Top horizontal // shape.SetAsEdge(b2Vec2(5.0f/PTM_RATIO, 475.0f/PTM_RATIO), b2Vec2(315.0f/PTM_RATIO, 475.0f/PTM_RATIO)); // groundBody->CreateFixture(&sd); // // // Bottom horizontal // shape.SetAsEdge(b2Vec2(5.0f/PTM_RATIO, 5.0f/PTM_RATIO), b2Vec2(315.0f/PTM_RATIO, 5.0f/PTM_RATIO)); // groundBody->CreateFixture(&sd); } -(void) createBox2dWorld { // Define the gravity vector. b2Vec2 gravity; gravity.Set(0.0f, -10.0f); // Do we want to let bodies sleep? This will speed up the physics simulation bool doSleep = true; _world = new b2World(gravity, doSleep); // Construct a world object, which will hold and simulate the rigid bodies. _world->SetContinuousPhysics(true); // Debug Draw functions _m_debugDraw = new GLESDebugDraw(PTM_RATIO); _world->SetDebugDraw(_m_debugDraw); // 创建地面盒或者屏幕边界~ // [self createGround]; // Add contact listener MyContactListener *_contactListener = new MyContactListener(); _world->SetContactListener(_contactListener); // 如果 DEBUG_DRAW 的开关打开了的话,还可以对 DEBUG_DRAW 具体要画出些什么内容进行详细配置~ uint32 flags = 1; if(DEBUG_DRAW) { flags = 0; } flags += b2DebugDraw::e_shapeBit; // flags += b2DebugDraw::e_jointBit; // flags += b2DebugDraw::e_aabbBit; // flags += b2DebugDraw::e_pairBit; // flags += b2DebugDraw::e_centerOfMassBit; _m_debugDraw->SetFlags(flags); }
相关文章推荐
- Box2D 物理引擎---创建一个简单的模拟物理世界
- 从零开始box2d(1) 创建世界
- jsp和Servlet的区别以及什么时候创建Servlet或者class文件
- Android基于box2d开发弹弓类游戏[三]-------------创建游戏世界
- 在box2d世界中创建物体的几个必须步骤
- 在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法
- NSDictionary创建、引用以及遍历等功能(Objective-C 开发范例)
- android box2d重力系统 创建游戏世界(一)
- openGL es2.0 创建物理世界_颜色立方体刚体_颜色平面刚体以及四元数转换
- Android基于box2d开发弹弓类游戏[三]-------------创建游戏世界
- 创建路径,以"\" 或者"//"为最后以及目录
- 用Box2D创建真正的爆炸—爆炸的物体以及用鼠标指定爆炸的中心
- 动态创建窗口的问题--风格WS_BORDER以及WS_EX_CLIENTEDGE
- 动态创建Text或者Label并且控制文本颜色以及透明度
- 愤怒的小鸟-物理世界Box2d(1)-静态刚体的创建
- Mac下 Xcode5+,cocos2d-x2.2(或者cocos2d-x2.1.5)Android,eclipse(2013 September版本)跨平台环境配置以及创建跨平台项目
- Mac下 Xcode4.6.3,cocos2d-x2.2(或者cocos2d-x2.1.5)Android,eclipse(2013 September版本)跨平台环境配置以及创建跨平台项目
- 用C#创建一个互动3D世界
- iPhone-获取网络数据或者路径的文件名以及后缀
- Android学习笔记2 创建另一个activity以及实现intent消息传递