在游戏中我们可以通过关节约束两个物体的运动。我们通过一个距离关节实例,介绍一下如何在使用关节。
这个实例的运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点和附近生成两个新的精灵,它们的运行是自由落体运动,它们之间的距离是固定的。图示是开启了绘制调试遮罩,从图中可见,调试遮罩不仅会显示物体,还会显示关节。
使用距离关节实例
使用距离关节实例(绘制调试遮罩)
代码部分中HelloWorldScene.h文件与上一节的实例非常类似,不再介绍了。HelloWorldScene.cpp中创建物理世界和指定世界的边界语句是在HelloWorld::createScene()和HelloWorld::init()函数中,这两个函数类似于上一节实例,这里也不再解释这些函数代码了。
HelloWorldScene.cpp中与使用关节的相关代码如下:
- bool HelloWorld::onTouchBegan(Touch* touch, Event* event)
- {
- Vec2 location = touch->getLocation();
- addNewSpriteAtPosition(location);
- return false;
- }
- void HelloWorld::addNewSpriteAtPosition(Vec2 p)
- {
- Size visibleSize = Director::getInstance()->getVisibleSize();
- Vec2 origin = Director::getInstance()->getVisibleOrigin();
- auto boxA = Sprite::create("BoxA2.png"); ①
- boxA->setPosition(origin+ p); ②
- auto boxABody = PhysicsBody::createBox(boxA->getContentSize()); ③
- boxA->setPhysicsBody(boxABody); ④
- addChild(boxA, 10, 100); ⑤
- auto boxB = Sprite::create("BoxB2.png");
- boxB->setPosition(origin + p + Vec2(0, -120));
- auto boxBBody = PhysicsBody::createBox(boxB->getContentSize());
- boxB->setPhysicsBody(boxBBody);
- addChild(boxB, 20, 101);
- auto world = this->getScene()->getPhysicsWorld(); ⑥
- PhysicsJointDistance* joint = PhysicsJointDistance::construct(boxABody, boxBBody,
- Vec2(0, 0), Vec2(0, boxB->getContentSize().width / 2)); ⑦
- world->addJoint(joint); ⑧
- }
上面代码onTouchBegan函数是触摸响应函数,在onTouchBegan中调用addNewSpriteAtPosition函数。在addNewSpriteAtPosition中创建两个精灵,创建两个物体,并设置它们之间的关节约束。代码第①行创建精灵boxA,第②行设置它的位置。第③行代码PhysicsBody::createBox(boxA->getContentSize())是创建矩形盒子物体。第③行代码boxA->setPhysicsBody(boxABody) 是设置与精灵相关的物体对象。第⑤行是将精灵添加到当前层中。
创建完成boxA和boxABody,下面又紧接着创建了boxB 和boxBBody对象。创建好它们之后就可以进行添加关节约束了,第⑥行代码auto world = this->getScene()->getPhysicsWorld()是从场景中获得物理世界(PhysicsWorld)对象。第⑦行代码通过PhysicsJointDistance的静态函数construct创建距离关节对象,其中锚点坐标采用的模型坐标(本地坐标),如果获得的不是模型坐标,可以进行坐标转换。PhysicsBody中提供两个坐标转换函数:
Vec2 world2Local(const Vec2& point)。世界坐标转换为模型坐标。
Vec2 local2World(const Vec2& point)。模型坐标转换为世界坐标。
最后第⑧行代码world->addJoint(joint)语句是将创建关节添加到物理世界中。
《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是一个广泛使用的开源跨平台2D游戏引擎,它允许开发者使用C++、Lua或JavaScript进行游戏编程,并能在iOS、Android、Windows等多个平台上运行。本实例“愤怒的松鼠”是基于cocos2d-x框架...
本文将深入探讨如何在cocos2d-x项目中集成并使用Box2D物理引擎。 1. **cocos2d-x简介** cocos2d-x是用C++编写的,基于cocos2d-x Objective-C版本的跨平台游戏开发框架。它支持iOS、Android、Windows、Mac等多个...
4. **物理引擎**:讲解Cocos2d-x中集成的物理引擎Box2D的基本使用方法,如创建刚体、添加关节等。 5. **粒子系统**:详细介绍如何使用粒子系统来实现火焰、爆炸等效果,提升游戏画面的真实感。 6. **声音与音乐*...
Cocos2d-x内置了Box2D物理引擎,该书会讲解如何设置物理世界,创建刚体、关节,以及如何编写碰撞检测和响应逻辑。这些知识对于创建真实感的物理行为至关重要。 另外,游戏中的动画和粒子效果也是吸引玩家的重要因素...
【瘸腿蛤蟆笔记42-cocos2d-x-3.2 Box2d物理引擎Motor Joint代码】 在游戏开发中,物理引擎是一个重要的组成部分,它能够帮助开发者模拟真实世界中的物理现象,使得游戏中的物体运动更加逼真。Cocos2d-x是一个广泛...
cocos2d-x集成了Box2D物理引擎,通过定义刚体(Body)、形状(Shape)和关节(Joint),可以创建出逼真的物理世界。 触摸事件处理是游戏交互的关键,cocos2d-x提供了一个事件监听系统,开发者可以注册监听器来响应...
5. **物理引擎**:探索Box2D物理引擎的集成,如何创建刚体、关节,以及进行碰撞检测和响应。 6. **音频与音乐**:学习如何使用AudioEngine播放背景音乐和音效,理解音频管理的细节。 7. **游戏逻辑与状态管理**:...
3. **物理引擎**:游戏可能使用了Cocos2d-x内置的Box2D物理引擎,用于模拟物体碰撞、重力等物理效果。源码中会有Box2D世界、身体、形状、关节等概念的实例。 4. **用户交互**:通过`EventDispatcher`和`Event...
在本篇中,我们将深入探讨Cocos2d-x游戏引擎中的Box2D物理模拟库,这对于游戏开发,尤其是2D物理交互式游戏至关重要。Box2D是一个强大的开源库,专门用于2D物理模拟,它为开发者提供了实现物体碰撞、重力、弹性以及...
《知易Cocos2D-iPhone游戏开发教程008》是针对Cocos2D-iPhone框架下使用Box2D物理引擎进行游戏开发的一节详细教程。本教程旨在帮助开发者深入理解和掌握如何在Cocos2D-iPhone环境中集成并利用Box2D进行游戏的物理...
在这个实例工程中,我们将会探讨如何使用PhysicsEditor编辑器来创建物理形状,并在cocos2d-x中利用Box2D的debugdraw功能进行可视化调试。 首先,PhysicsEditor是一款图形化的物理形状编辑工具,它允许开发者直观地...
在本案例中,我们看到的"box2d物理引擎cocos2d"是Cocos2d集成了Box2D物理引擎的一个实例,它涵盖了Cocos2d的2.x和3.x两个版本。 Box2D引擎的核心概念包括刚体(Bodies)、形状(Shapes)、关节(Joints)和力...
在Cocos2d-x这个强大的2D游戏开发框架中,Box2D是一个广泛使用的物理引擎,它可以帮助开发者创建逼真的物理模拟效果。然而,在实际开发过程中,有时我们可能遇到一个棘手的问题,那就是Box2d的`debugDraw`功能无法...
总的来说,"cocos2dx模仿人要慌绳子的物理小demo"是一个很好的学习实例,它涵盖了Cocos2d-x 3.x中的基本物理引擎使用,包括物理世界的创建、刚体和关节的使用,以及用户输入的处理。通过这个项目,开发者可以进一步...
Cocos2d-x v3.0引入了Box2D物理引擎,一个用于2D物理模拟的库,它允许开发者模拟物体的运动、碰撞检测和重力等物理现象。Box2D提供了多种基础物理对象,如刚体(rigid bodies)、形状(shapes)、关节(joints)等,...
4. **物理引擎**:Cocos2d-x集成了Box2D物理引擎,介绍如何使用物理世界、刚体(Body)、形状(Shape)和关节(Joint)来创建真实感的物理模拟。 5. **用户交互**:学习如何处理触摸事件,实现玩家与游戏的交互,...
Box2D则是一个强大的2D物理引擎,用于模拟现实世界的物理效果,如重力、碰撞检测、摩擦力等。在ocos2d-x项目中整合Box2D,可以为游戏带来更加真实的动态效果。 在这个“ocos2d-x默认项目注释Box2D”的资源中,...
【cpp-demo-tiled-2015-3-1.zip】是一个包含Cocos2d-x游戏开发示例的压缩包,特别关注了使用Tiled地图和物理引擎的方面。Cocos2d-x是一个广泛使用的开源游戏开发框架,支持多种平台,如iOS、Android、Windows等。这...
此源码包是基于iOS平台的游戏开发实例,特别引入了Box2D库,这是一个广泛使用的2D物理引擎,为游戏中的物体运动提供真实感的模拟。 首先,我们要了解Box2D。Box2D是一个开源的2D物理引擎,由Erin Catto开发,主要...