b2DebugDraw提供调试功能,由于Box2D中所有对象都是不可见的,要创建可见对象我们得用刚体定义中的userData属性来创建自己的图形,如果不创建自己的图形,则用b2DebugDraw类来实现物体的可见,方便调试。
闪吧新社区7uV`8a?1nC/
闪吧新社区&x:^7V0^${i x具体代码:
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个标志常量:闪吧新社区a"_ l#D1tP b2DebugDraw.e_aabbBit :表示显示刚体的边界盒闪吧新社区J(s@9w+]@i4` b2DebugDraw.e_jointBit :表示显示刚体相连时的节点和连线 Pk3kI t0 b2DebugDraw.e_obbBit :显示凸多边形的边界,不显示圆的边界 ,w$e"x ` UZu0 b2DebugDraw.e_pairBit:draw broad-phase pairs(不知如何翻译是好用原文)闪吧新社区#ts3S d S b2DebugDraw.e_coreShapeBit:draw core (TOI) shapes 6TO%UbP0 b2DebugDraw.e_shapeBit:显示刚体的形状,不管是何种形状闪吧新社区+Y,FA;DT m9h@ b2DebugDraw.e_centerOfMassBit:显示质量中心。重心?质心?
上面的代码我们可以设置绘制刚体的线条透明度,粗细,以及填充刚体颜色的透明度,但我们无法设置填充刚体所用的颜色,在Box2D中,默认有三中颜色来填充刚体,即红色,绿色,灰色。
;S0H4@'}M(y8f0 :~/s:Rk:u0 红色---------表示已经处于休眠状态的刚体闪吧新社区 mR|'t!dt)XY"^"e 绿色---------表示静止的刚体,没有密度质量的刚体 -e�C8kiV`0 灰色---------表示正在移动的刚体
不过,我们可以修改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实例的值,只需修改其构造函数中的三个对应的值即可。 原文地址:http://space.flash8.net/space/?uid-628770-action-viewspace-itemid-432377