Box2D中的b2DebugDraw使用示例

本文介绍如何在Box2D中使用b2DebugDraw类进行物体可见性调试,包括创建自定义图形、设置比例、绘制内容、线条透明度、颜色透明度、线条粗细等。同时展示了如何通过修改b2World类中的代码来调整默认的刚体颜色,并提供了Box2D中b2DebugDraw类的7个标志常量解释。
b2DebugDraw提供调试功能,由于Box2D中所有对象都是不可见的,要创建可见对象我们得用刚体定义中的userData属性来创建自己的图形,如果不创建自己的图形,则用b2DebugDraw类来实现物体的可见,方便调试。
具体代码:
private function showDebug():void
                  {
                            //创建一个sprite,提供渲染
var m_sprite:Sprite = new Sprite();
                            addChild(m_sprite);
                            var dbgSprite:Sprite = new Sprite();
                            //m_sprite添加一个子sprite
                            m_sprite.addChild(dbgSprite);
                            var dbgDraw:b2DebugDraw = new b2DebugDraw();
                            //m_sprite作为dbgDraw的渲染sprite
                            dbgDraw.m_sprite = m_sprite;
                            //设置比例为30,如果不设置则所有物体都会很小,box2D中以米为单位,1m=30像素
                            dbgDraw.m_drawScale = physScale;
                            //设置要显示的内容,每个标志代表一项
                            dbgDraw.m_drawFlags = b2DebugDraw.e_aabbBit |
                                                                             b2DebugDraw.e_jointBit |
                                                                             b2DebugDraw.e_obbBit |
                                                                             b2DebugDraw.e_shapeBit;
                            //绘制刚体所用线条的透明度
                            dbgDraw.m_alpha = 1;
                            //填充刚体所用颜色的透明度
                            dbgDraw.m_fillAlpha = 0.3;
                            //绘制刚体所用线条的粗细
                            dbgDraw.m_lineThickness = 1;
                            //从虚拟世界开始模拟
                            world.SetDebugDraw(dbgDraw);
                   }
b2DebugDraw类中有7个标志常量:
           b2DebugDraw.e_aabbBit :表示显示刚体的边界盒
           b2DebugDraw.e_jointBit :表示显示刚体相连时的节点和连线
           b2DebugDraw.e_obbBit :显示凸多边形的边界,不显示圆的边界
           b2DebugDraw.e_pairBit:draw broad-phase pairs(不知如何翻译是好用原文)
           b2DebugDraw.e_coreShapeBit:draw core (TOI) shapes
           b2DebugDraw.e_shapeBit:显示刚体的形状,不管是何种形状
           b2DebugDraw.e_centerOfMassBit:显示质量中心。重心?质心?
上面的代码我们可以设置绘制刚体的线条透明度,粗细,以及填充刚体颜色的透明度,但我们无法设置填充刚体所用的颜色,在Box2D中,默认有三中颜色来填充刚体,即红色,绿色,灰色。
          红色---------表示已经处于休眠状态的刚体
          绿色---------表示静止的刚体,没有密度质量的刚体
          灰色---------表示正在移动的刚体
不过,我们可以修改b2World类中1060-1074 行的代码来修改这三种默认的颜色,b2World中的代码如下:

     for (s = b.GetShapeList(); s; s = s.m_next)
     {
	if (b.IsStatic())
	{
		DrawShape(s, xf, new b2Color(0.5, 0.9, 0.5), core);
	}
	else if (b.IsSleeping())
	{
		DrawShape(s, xf, new b2Color(0.5, 0.5, 0.9), core);
	}
	else
	{
		DrawShape(s, xf, new b2Color(0.9, 0.9, 0.9), core);
	}
    }
这里实际是修改传递给b2Color实例的值,只需修改其构造函数中的三个对应的值即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值