下面我们将使用Box2D物理引擎技术进行重构。使得关节能够掌握如何在Box2D使用关节约束。
HelloWorldScene.cpp中与使用关节的相关代码如下:
- void HelloWorld::addNewSpriteAtPosition(Vec2 p)
- {
- log("Add sprite %0.2f x %02.f",p.x,p.y);
- //创建物理引擎精灵对象A
- auto spriteA = Sprite::create("BoxA2.png"); ①
- spriteA->setPosition(p);
- this->addChild(spriteA);
- // 动态物体A定义
- b2BodyDef bodyDef;
- bodyDef.type = b2_dynamicBody;
- bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
- b2Body *bodyA = world->CreateBody(&bodyDef);
- bodyA->SetUserData(spriteA); ②
- //创建物理引擎精灵对象B
- auto spriteB = Sprite::create("BoxB2.png"); ③
- spriteB->setPosition(p + Vec2(100, -100)); ④
- this->addChild(spriteB);
- // 动态物体B定义
- bodyDef.type = b2_dynamicBody;
- Vec2 posB = spriteB->getPosition();
- bodyDef.position.Set(posB.x/PTM_RATIO , posB.y /PTM_RATIO); ⑤
- b2Body *bodyB = world->CreateBody(&bodyDef);
- bodyB->SetUserData(spriteB); ⑥
- // 定义2米见方的盒子形状
- b2PolygonShape dynamicBox;
- dynamicBox.SetAsBox(1, 1);
- // 动态物体夹具定义
- b2FixtureDef fixtureDef;
- //设置夹具的形状
- fixtureDef.shape = &dynamicBox;
- //设置密度
- fixtureDef.density = 1.0f;
- //设置摩擦系数
- fixtureDef.friction = 0.3f;
- //使用夹具固定形状到物体上
- bodyA->CreateFixture(&fixtureDef); ⑦
- bodyB->CreateFixture(&fixtureDef); ⑧
- // 距离关节定义
- b2DistanceJointDef jointDef; ⑨
- jointDef.Initialize(bodyA, bodyB, bodyA->GetWorldCenter(),
- bodyB->GetWorldCenter()); ⑩
- jointDef.collideConnected = true; ⑪
- bodyA->GetWorld()->CreateJoint(&jointDef); ⑫
- }
上述代码第①~②行是创建精灵对象A和创建物体A。第③~⑥行是创建精灵对象B和创建物体B。代码第④行是设置精灵B的位置,p是触摸点的位置,p + Vec2(100, -100)表示在触摸点的右下方,相对位置(100, -100)。第⑤行代码是设置物体B的位置,它的单位是米,因此需要精灵B的位置除以PTM_RATIO。
第⑦行和第⑧行代码是使用夹具固定形状(2米见方的盒子形状)到物体A和物体B上。由于形状相相同,使用同一个夹具定义fixtureDef分别固定到物体上。
第⑨~⑫行代码是添加距离关节,其中第⑨行代码b2DistanceJointDef jointDef是声明距离关节定义,第⑩行代码jointDef.Initialize(bodyA, bodyB, bodyA->GetWorldCenter(),bodyB->GetWorldCenter())是初始化距离关节定义,其中第一个和第二参数是物体A和物体B的锚点,第三参数和第四参数是物体A和物体B的世界坐标,bodyA->GetWorldCenter()函数是获得物体A中心点的世界坐标。第⑪行代码jointDef.collideConnected = true是允许相连的物体碰撞。第⑫行代码bodyA->GetWorld()->CreateJoint(&jointDef)是通过物理世界对象根据jointDef(关节定义)创建关节。
在上面的实例中,我们只是使用了距离关节,而Box2D v2版本中定义了很多关节。这些关节包括:
距离关节。两个物体之间保持固定的距离。每个物体上的点称为锚点。关节定义是b2DistanceJointDef。
旋转关节。允许物体围绕公共点旋转。关节定义是b2RevoluteJointDef。
平移关节。两个物体之间的相对旋转是固定的,它们可以沿着一个坐标轴进行平移。关节定义是b2PrismaticJointDef。
焊接关节。可以把物体固定在相同方向上。关节定义是b2WeldJointDef。
滑轮关节。滑轮关节用于创建理想的滑轮,两个物体位于绳子两端,绳子通过某个固定点(滑轮的位置)将两个物体连接起来。这样当一个物体升起时,另一个物体就会下降。滑轮两端的绳子总长度不变。关节定义是b2PulleyJointDef。
摩擦关节。降低两个物体之间的相对运动。关节定义是b2FrictionJointDef。
齿轮关节。控制其它两个关节(旋转关节或者平移关节),其中一个的运动会影响另一个。关节定义是b2GearJointDef。
鼠标关节。点击物体上任意一个点可以在世界范围内进行拖动。关节定义是b2MouseJointDef。
这些关节定义初始化的时候参数都各不相同,但是参数都是比较类似的。此外,除了上面列出的关节外,还有一些其它的关节,这关节不是很常用,这里不再一一介绍了。
《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11584534.html
当当:http://product.dangdang.com/23606265.html
互动出版网:http://product.china-pub.com/3770734
《Cocos2d-x实战 C++卷》源码及样章下载地址:
源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1
样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1
相关推荐
同时,Cocos2d-x集成了Box2D物理引擎,使开发者能轻松实现物理效果,如碰撞检测、重力模拟等。 游戏中的音频管理也是不可或缺的一环。本书会介绍Cocos2d-x的音频API,包括音乐播放、音效处理以及音效资源的加载和...
3. **物理引擎**:介绍Cocos2d-x内置的Box2D物理引擎,用于模拟游戏中的碰撞检测和物理行为。 4. **事件处理**:讲解如何处理用户输入、触摸事件以及游戏内的各种交互事件。 5. **游戏逻辑**:通过实例解析如何...
在cocos2d-x中,你需要创建一个Box2D的世界实例,这是所有物理模拟的基础。通过设置重力向量和其他参数,你可以控制游戏环境的物理特性。 5. **定义物理对象** 使用Box2D,你可以创建各种形状的物理对象,如矩形...
4. **物理引擎**:了解Cocos2d-x内置的Box2D或Chipmunk物理引擎,如何模拟真实世界的物理行为,如碰撞检测和重力。 5. **事件处理**:掌握事件监听和响应机制,包括触摸事件、键盘事件以及自定义事件的处理,实现...
在Cocos2d-x中,Box2d的物理世界和游戏场景通常通过`cocos2d::Scene`的子类进行结合。你需要重写`update`方法,以便每帧调用`world->Step()`来执行物理模拟,同时处理Motor Joint和其他物理对象的行为。 最后,别忘...
5. **动画与物理引擎**:Cocos2d-x提供了强大的动画支持和Box2D物理引擎,源码将展示如何用Lua编写复杂的动画序列,以及如何实现物理效果,如碰撞检测、重力等。 6. **游戏逻辑**:通过实际的游戏逻辑代码,可以...
在本篇中,我们将深入探讨使用Cocos2d-x 3.2框架集成Box2D物理引擎实现自由落体效果的编程技术。Cocos2d-x是一个广泛使用的开源游戏开发框架,它支持多种平台,包括iOS、Android以及桌面系统。Box2D是一个强大的2D...
Cocos2d-X集成了Box2D物理引擎,源码中可能包含如何创建物理世界、设置物理属性、实现物理碰撞的示例。 10. **调试和测试**: 源码集合可能包含调试工具和测试用例,这对于理解和改进代码质量非常有用。 通过...
同时,cocos2d-x内置了物理引擎Box2D,这在“愤怒的松鼠”游戏中起到了关键作用。 Box2D是一个2D物理引擎,常用于实现物体碰撞检测、重力模拟等物理效果。在“愤怒的松鼠”中,Box2D可能被用来创建松鼠、障碍物和...
《cocos2d-x 3.x游戏开发实战光盘》是一个深入探讨cocos2d-x 3.x游戏引擎开发的资源集合,旨在帮助开发者通过实际案例掌握这一强大的2D游戏开发工具。cocos2d-x是一款开源的游戏开发框架,基于C++,广泛应用于跨平台...
碰撞检测是判断子弹是否击中敌机的关键,Cocos2d-x提供了Box2D物理引擎的集成,可以用来进行精确的碰撞检测。开发者需要定义合适的碰撞形状,并处理好碰撞回调函数,以执行相应的游戏逻辑,如扣除敌人生命值、增加...
4. 物理引擎集成:Cocos2d-X可以与Box2D物理引擎无缝对接,用于模拟物体碰撞、重力等物理效果,为游戏添加真实感。 5. 粒子系统:内置的粒子系统让开发者可以轻松创建烟花、火焰、雪花等视觉效果,提升游戏画面的...
在Cocos2d-x中,你可以通过创建`cc::Sprite`类实例来表示这些对象。鸟的飞行动画可以通过多个精灵帧来实现,而管道则可以作为静态精灵进行显示。 4. **物理引擎**:为了实现鸟的飞行效果,我们需要使用Cocos2d-x...
cocos2d-x 是一个广泛使用的开源游戏开发框架,尤其在移动平台上备受青睐。2011年10月20日发布的版本为1.0.1-x-0.9.2,这一版本在前一版的基础上进行了多项优化和增强,旨在提供更加稳定、高效的游戏开发环境。本文...
《精通COCOS2D-X游戏开发进阶卷》是一本深入探讨Cocos2d-x游戏引擎的专业书籍,旨在帮助开发者提升在Cocos2d-x框架下的游戏制作技能。Cocos2d-x是一款广泛使用的开源游戏开发框架,它基于C++,同时也支持Lua和...
这本书的《Cocos2d-x实战Lua卷.pdf》将通过丰富的实例和详细解释,帮助读者掌握使用lua进行Cocos2d-x游戏开发的技能,无论是初学者还是有经验的开发者,都能从中获得宝贵的知识和实践经验。对于想要提升游戏开发能力...
"让人物动起来"将深入到角色的动态行为设计,讲解如何使用物理引擎(如Box2D)来实现物体碰撞检测和物理效果,创建出更真实的交互体验。 "高级UI控件"部分会探讨Cocos2d-x中的用户界面设计,包括按钮、滑块、标签等...
cocos2d-x集成了Box2D物理引擎,可以创建复杂的物理模拟,如碰撞检测、重力等。熟悉Box2D的基本概念和API,可以实现真实的物理效果。 七、音频和音效 cocos2d-x支持播放背景音乐和音效,理解如何加载、播放和控制...
4. **物理引擎**:探讨Cocos2d-x内置的Box2D物理引擎,如何实现物体碰撞检测、重力模拟以及物理行为的控制。 5. **用户输入与事件处理**:解析Cocos2d-x的事件模型,如何监听和响应用户的触摸、键盘输入,以及游戏...
3. **物理引擎集成**:讲解如何使用Box2D或Chipmunk等物理引擎,实现游戏中的碰撞检测和物理行为模拟。 4. **音频处理**:介绍Cocos2d-x的音频管理,如何播放背景音乐、音效,并进行音量控制。 5. **用户输入与...