cocos2d-x 3.x 物理碰撞机制

  次阅读 作者:智能小宝 来源:互联网 2015-09-27 15:32 我要评论(0)

最近又弄了物理引擎,写一下吧,下面有在其他博客学习到的知识,加上自己的理解,总结下。

cocos2d-x 3.X 中全新的封装的物理引擎给了开发者最大的便捷,你不用再繁琐与各种物理引擎的细节,完全的封装让开发者可以更快更好的将物理引擎的机制添加到自己的游戏中,简化的设计是从2.0到3.X的一个质的飞跃。

cocos2d-x 3.0+中的物理属性:

1、物理世界被集成到场景中,当你创建一个场景,你可以直接创建基于物理世界或者不使用物理世界的场景。

2、Node拥有它自己的body属性。(sprite也是node)‘

3、cocos2d-x 3.0 已经封装了物理属性Body(PhysicsBody),Shape(PhysicsShape),Contact(PhysicsContact),Joint(PhysicsJoint)和World(PhysicsWorld),更加方便使用。

4、方便的使用listener-EventListenerPhysicsContact进行碰撞检测。

当然,封装好的物理引擎可以简化开发难度,如果有能力的话也可以直接使用Box2D和Chipmunk的原生的物理引擎进行开发,这样难度会有所提升。

下面的代码创建一个带物理世界的场景,并传递到场景中的层上。

PhysicsLayer.h中

[cpp]

class PhysicsLayer : public cocos2d::Layer

{

...

// add following codes设置层中的物理世界

void setPhyWorld(PhysicsWorld* world){m_world = world;}

private:

PhysicsWorld* m_world;

...

} PhysicsLayer.cpp中的createScene()方法中添加下面代码:

[cpp]

Scene* PhysicsLayer::createScene()

{

...

// add following codes

auto scene = Scene::createWithPhysics();

scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);//调试

auto layer = HelloWorld::create();

layer->setPhyWorld(scene->getPhysicsWorld());//将创建的物理世界传递到子层中

scene->addChild(layer);

return scene;

}

Scene类有一个新的static工厂方法createWithPhysics()创建一个带物理世界的场景。可以通过getPhysicsWorld()来获取PhysicsWorld的实例。

上述代码中注释为调试的代码在调试中非常有用,它会显示游戏中物体所带有的物理边界,便于观察碰撞中的细节等。

同时一个场景中只能有一个物理世界,所有属于这个场景的子层都共享这一个物理世界,所以在子层中用到物理世界时都会有这个定义的函数

[cpp]

void setPhyWorld(PhysicsWorld* world){m_world = world;} 进而来设置子层中的物理世界。

PhysicsWorld拥有默认的重力设置,Vector(0.0f,-98.0f),当然你也可以随意设置你想要的重力加速度,setGravity(Vect(0.0f,-200.0f)),设置重力加速度为20米每二次方秒。

创建物理边界

下面的代码创建一个物理边界,其实就是做外面的边界框 [cpp] view plaincopy

Size visibleSize = Director::getInstance()->getVisibleSize();

auto body = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 3);//设要添加到节点中的物理body ,这个Box是不受碰撞检测的!!!

auto edgeNode = Node::create();

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...