`

实例介绍Cocos2d-x物理引擎:使用关节

 
阅读更多

在游戏中我们可以通过关节约束两个物体的运动。我们通过一个距离关节实例,介绍一下如何在使用关节。

 

这个实例的运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点和附近生成两个新的精灵,它们的运行是自由落体运动,它们之间的距离是固定的。图示是开启了绘制调试遮罩,从图中可见,调试遮罩不仅会显示物体,还会显示关节。

 

使用距离关节实例

 

 

使用距离关节实例(绘制调试遮罩)

代码部分中HelloWorldScene.h文件与上一节的实例非常类似,不再介绍了。HelloWorldScene.cpp中创建物理世界和指定世界的边界语句是在HelloWorld::createScene()HelloWorld::init()函数中,这两个函数类似于上一节实例,这里也不再解释这些函数代码了。

HelloWorldScene.cpp中与使用关节的相关代码如下:

 

[html] view plaincopy
  1. bool HelloWorld::onTouchBegan(Touch* touch, Event* event)  
  2. {  
  3. Vec2 location = touch->getLocation();  
  4. addNewSpriteAtPosition(location);  
  5. return false;  
  6. }  
  7.    
  8. void HelloWorld::addNewSpriteAtPosition(Vec2 p)  
  9. {    
  10. Size visibleSize = Director::getInstance()->getVisibleSize();  
  11. Vec2 origin = Director::getInstance()->getVisibleOrigin();  
  12.    
  13. auto boxA = Sprite::create("BoxA2.png");     ①  
  14. boxA->setPosition(origin+ p);     ②  
  15.    
  16. auto boxABody = PhysicsBody::createBox(boxA->getContentSize());   ③  
  17. boxA->setPhysicsBody(boxABody);   ④  
  18. addChild(boxA, 10, 100);     ⑤  
  19.    
  20. auto boxB = Sprite::create("BoxB2.png");  
  21. boxB->setPosition(origin + p + Vec2(0, -120));  
  22. auto boxBBody = PhysicsBody::createBox(boxB->getContentSize());  
  23. boxB->setPhysicsBody(boxBBody);  
  24. addChild(boxB, 20, 101);  
  25.    
  26. auto world = this->getScene()->getPhysicsWorld();  ⑥  
  27.    
  28. PhysicsJointDistance* joint = PhysicsJointDistance::construct(boxABody, boxBBody,   
  29. Vec2(0, 0), Vec2(0, boxB->getContentSize().width / 2));   ⑦  
  30.    
  31. world->addJoint(joint);   ⑧  
  32.    
  33. }  

 

 

上面代码onTouchBegan函数是触摸响应函数,在onTouchBegan中调用addNewSpriteAtPosition函数。在addNewSpriteAtPosition创建两个精灵,创建两个物体,并设置它们之间的关节约束。代码第①行创建精灵boxA,第②行设置它的位置。第③行代码PhysicsBody::createBox(boxA->getContentSize())是创建矩形盒子物体。第③行代码boxA->setPhysicsBody(boxABody) 设置与精灵相关的物体对象。第⑤行是将精灵添加到当前层中。

创建完成boxAboxABody,下面又紧接着创建了boxB boxBBody对象。创建好它们之后就可以进行添加关节约束了,第⑥行代码auto world = this->getScene()->getPhysicsWorld()是从场景中获得物理世界(PhysicsWorld)对象。第⑦行代码通过PhysicsJointDistance的静态函数construct创建距离关节对象,其中锚点坐标采用的模型坐标(本地坐标),如果获得的不是模型坐标,可以进行坐标转换。PhysicsBody中提供两个坐标转换函数

 Vec2 world2Local(const Vec2& point)。世界坐标转换为模型坐标。

Vec2 local2World(const Vec2& point)。模型坐标转换为世界坐标。

最后第⑧行代码world->addJoint(joint)语句是将创建关节添加到物理世界中

 

 

 

更多内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
本书交流讨论网站:http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386


《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

京东:http://item.jd.com/11584534.html

亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

当当: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

欢迎关注智捷iOS课堂微信公共平台
分享到:
评论

相关推荐

    cocos2d-x 实例源码

    在游戏开发领域,cocos2d-x是一个广泛使用的开源跨平台2D游戏引擎,它允许开发者使用C++、Lua或JavaScript进行游戏编程,并能在iOS、Android、Windows等多个平台上运行。本实例“愤怒的松鼠”是基于cocos2d-x框架...

    cocos2d-x box2d 物理引擎

    本文将深入探讨如何在cocos2d-x项目中集成并使用Box2D物理引擎。 1. **cocos2d-x简介** cocos2d-x是用C++编写的,基于cocos2d-x Objective-C版本的跨平台游戏开发框架。它支持iOS、Android、Windows、Mac等多个...

    兄弟连cocos2d-x3.0 final视频教程完整版

    4. **物理引擎**:讲解Cocos2d-x中集成的物理引擎Box2D的基本使用方法,如创建刚体、添加关节等。 5. **粒子系统**:详细介绍如何使用粒子系统来实现火焰、爆炸等效果,提升游戏画面的真实感。 6. **声音与音乐*...

    cocos2d-x实战_lua卷

    Cocos2d-x内置了Box2D物理引擎,该书会讲解如何设置物理世界,创建刚体、关节,以及如何编写碰撞检测和响应逻辑。这些知识对于创建真实感的物理行为至关重要。 另外,游戏中的动画和粒子效果也是吸引玩家的重要因素...

    瘸腿蛤蟆笔记42-cocos2d-x-3.2 Box2d物理引擎Motor Joint代码

    【瘸腿蛤蟆笔记42-cocos2d-x-3.2 Box2d物理引擎Motor Joint代码】 在游戏开发中,物理引擎是一个重要的组成部分,它能够帮助开发者模拟真实世界中的物理现象,使得游戏中的物体运动更加逼真。Cocos2d-x是一个广泛...

    FlappyBird-cocos2dx-master_TheMaster_cocos2d-x_

    cocos2d-x集成了Box2D物理引擎,通过定义刚体(Body)、形状(Shape)和关节(Joint),可以创建出逼真的物理世界。 触摸事件处理是游戏交互的关键,cocos2d-x提供了一个事件监听系统,开发者可以注册监听器来响应...

    Cocos2D-x权威指南代码

    5. **物理引擎**:探索Box2D物理引擎的集成,如何创建刚体、关节,以及进行碰撞检测和响应。 6. **音频与音乐**:学习如何使用AudioEngine播放背景音乐和音效,理解音频管理的细节。 7. **游戏逻辑与状态管理**:...

    cocos2d-x权威指南 喵星战争源码 在cocos2dx-2.2.1版上可直接运行

    3. **物理引擎**:游戏可能使用了Cocos2d-x内置的Box2D物理引擎,用于模拟物体碰撞、重力等物理效果。源码中会有Box2D世界、身体、形状、关节等概念的实例。 4. **用户交互**:通过`EventDispatcher`和`Event...

    cocos2d-x学习笔记(20)-- box2d入门 .rar

    在本篇中,我们将深入探讨Cocos2d-x游戏引擎中的Box2D物理模拟库,这对于游戏开发,尤其是2D物理交互式游戏至关重要。Box2D是一个强大的开源库,专门用于2D物理模拟,它为开发者提供了实现物体碰撞、重力、弹性以及...

    知易Cocos2D-iPhone 游戏开发教程008

    《知易Cocos2D-iPhone游戏开发教程008》是针对Cocos2D-iPhone框架下使用Box2D物理引擎进行游戏开发的一节详细教程。本教程旨在帮助开发者深入理解和掌握如何在Cocos2D-iPhone环境中集成并利用Box2D进行游戏的物理...

    physicsEditor 编辑 coco2d-x解析 box2d debugdraw 实例工程 zip for mac

    在这个实例工程中,我们将会探讨如何使用PhysicsEditor编辑器来创建物理形状,并在cocos2d-x中利用Box2D的debugdraw功能进行可视化调试。 首先,PhysicsEditor是一款图形化的物理形状编辑工具,它允许开发者直观地...

    box2d物理引擎cocos2d

    在本案例中,我们看到的"box2d物理引擎cocos2d"是Cocos2d集成了Box2D物理引擎的一个实例,它涵盖了Cocos2d的2.x和3.x两个版本。 Box2D引擎的核心概念包括刚体(Bodies)、形状(Shapes)、关节(Joints)和力...

    cocos2dx测试debugDraw box2d

    在Cocos2d-x这个强大的2D游戏开发框架中,Box2D是一个广泛使用的物理引擎,它可以帮助开发者创建逼真的物理模拟效果。然而,在实际开发过程中,有时我们可能遇到一个棘手的问题,那就是Box2d的`debugDraw`功能无法...

    cocos2dx模仿人要慌绳子的物理小demo

    总的来说,"cocos2dx模仿人要慌绳子的物理小demo"是一个很好的学习实例,它涵盖了Cocos2d-x 3.x中的基本物理引擎使用,包括物理世界的创建、刚体和关节的使用,以及用户输入的处理。通过这个项目,开发者可以进一步...

    physicseditor.rar

    Cocos2d-x v3.0引入了Box2D物理引擎,一个用于2D物理模拟的库,它允许开发者模拟物体的运动、碰撞检测和重力等物理现象。Box2D提供了多种基础物理对象,如刚体(rigid bodies)、形状(shapes)、关节(joints)等,...

    cocos2dx游戏开发实战

    4. **物理引擎**:Cocos2d-x集成了Box2D物理引擎,介绍如何使用物理世界、刚体(Body)、形状(Shape)和关节(Joint)来创建真实感的物理模拟。 5. **用户交互**:学习如何处理触摸事件,实现玩家与游戏的交互,...

    ocos2d-x默认项目注释Box2D

    Box2D则是一个强大的2D物理引擎,用于模拟现实世界的物理效果,如重力、碰撞检测、摩擦力等。在ocos2d-x项目中整合Box2D,可以为游戏带来更加真实的动态效果。 在这个“ocos2d-x默认项目注释Box2D”的资源中,...

    cpp-demo-tiled-2015-3-1.zip

    【cpp-demo-tiled-2015-3-1.zip】是一个包含Cocos2d-x游戏开发示例的压缩包,特别关注了使用Tiled地图和物理引擎的方面。Cocos2d-x是一个广泛使用的开源游戏开发框架,支持多种平台,如iOS、Android、Windows等。这...

    IOS应用源码之axcho-CCBox2D-c761db6.zip

    此源码包是基于iOS平台的游戏开发实例,特别引入了Box2D库,这是一个广泛使用的2D物理引擎,为游戏中的物体运动提供真实感的模拟。 首先,我们要了解Box2D。Box2D是一个开源的2D物理引擎,由Erin Catto开发,主要...

Global site tag (gtag.js) - Google Analytics