cocos2d-x中使用box2d物理引擎时,开启debugDraw的方法

cocos2d-x中使用box2d物理引擎时,开启debugDraw的方法,第1张

概述<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">开启

<span >	</span><span >开启deBUGDraw就是让物理引擎控制的世界变得可以看见,比如一个刚体,如果没有将它和某个精灵绑定,那么它是不可见的;如果你想看到它的位置大小,以便直接的观察它和其他元素之间的碰撞等物理效果,那么开启deBUGDraw可以让它的轮廓变得可见。</span>

网上搜了一些答案,但是一直没有搞出来,主要是 1、答案是对应Cocos2d-x旧版本的,2、没有讲清楚某些宏或头文件的引用 3、方法确实是错的,可能过时了

使用Box2d肯定要构建“世界”,即b2World对象,开启deBUGDraw就是需要给b2World对象对象多赋一个值,代码如下:

b2Vec2 gravity;    gravity.Set(0,-10);        auto world = new b2World(gravity);    world->SetAllowSleePing(true);    world->SetContinuousPhysics(true);    m_world = new b2World(gravity);        deBUGDraw = new GLESDeBUGDraw(PTM_RATIO);   //这里新建一个 deBUG渲染模块    uint32 flags = 0;    flags += b2Draw::e_shapeBit;    flags += b2Draw::e_jointBit;    flags += b2Draw::e_centerOfMassBit;    deBUGDraw->SetFlags(flags);        deBUGDraw->SetFlags(flags);   //需要显示那些东西    m_world->SetDeBUGDraw(deBUGDraw);    //设置
就是最后一句,给m_world的m_deBUGDraw复制。

这里就会遇到第一个坑,这个成员的类型是b2Draw,是一个不能实例化对象的抽象类,系统本身的目的应该是让我们继承这个类,自己去构建绘制deBUGDraw的造型。但纠结这个问题的本身就是新手,比如我,怎么可能有能力去自己写物理引擎里的物体轮廓。还好Cocos2d-x源码包附带的demo里面有已经写好的类,可以直接用。名字为:GLES-Render.h 和GLES-Render.cpp。里面有继承b2Draw的类,已经写好了绘制物体轮廓的方法。所以这里的deBUGDraw对象通过

deBUGDraw = new GLESDeBUGDraw(PTM_RATIO);
来构建。

这是初始化,那么还需要调用绘制方法,并且是不断地绘制,网上查到的方法都是重写当前sence类的draw方法,但是我用的版本(3.2)已经没有draw方法了,从Node类就finish(源码中方法后用这个关键词修饰了)了。看了下源码换成是重写:

voID HelloWorld::draw(cocos2d::Renderer *renderer,const cocos2d::Mat4 &transform,uint32_t flags){    GL::enabLevertexAttribs( cocos2d::GL::VERTEX_ATTRIB_FLAG_position );        m_world->DrawDeBUGData();    CHECK_GL_ERROR_DEBUG();}

这个方法,在这里面调用DrawDeBUGData();

基本上就没有问题了,还有一个坑是 PTM_RATIO 这个宏,这是屏幕像素单位和物理引擎世界的单位米的换算比例。在deBUGDraw对象构建的时候要把它带进去:

deBUGDraw = new GLESDeBUGDraw(PTM_RATIO);

我按着网上查的32来设置的值,但之前没带这个值构建,导致绘制出的物体轮廓缩小的32倍,然后变得很小,以至于我以为没有绘制成功,然后找原因。细节坑死人啊!

总结

以上是内存溢出为你收集整理的cocos2d-x中使用box2d物理引擎时,开启debugDraw的方法全部内容,希望文章能够帮你解决cocos2d-x中使用box2d物理引擎时,开启debugDraw的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1026290.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存