1

当 box2d 集成到八哥对象中时,我在使用 DebugDraw 时遇到问题。

var debugSprite:Sprite = new Sprite();
addChild(debugSprite);
var debugDraw:b2DebugDraw = new b2DebugDraw();
debugDraw.SetSprite(debugSprite);
debugDraw.SetDrawScale(30);
debugDraw.SetLineThickness( 1.0);
debugDraw.SetAlpha(1);
debugDraw.SetFillAlpha(0.4);
debugDraw.SetFlags(b2DebugDraw.e_shapeBit);
PhysicsCore.World.SetDebugDraw(debugDraw);  

在上面的代码中,我在使用 flash.display.sprite 甚至 starling.core.Starling 时遇到问题,有人有解决方案吗?

4

2 回答 2

1

我知道这个威胁现在有点老了,但我自己也遇到了这个问题。debugDraw.SetSprite() 需要 flash.display.Sprite。Starling 使用 starling.display.Sprite;

如果你使用flash.display.Sprite,那么你不能将它添加到舞台上!

这是我发现的一种解决方法:

在主类中:

mStarling = new Starling(Game, stage);
stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, onContextCreated);

private function onContextCreated(e:Event):void
{
   var debugSprite:Sprite=new Sprite();
   addChild(debugSprite);
   (mStarling.stage.getChildAt(0) as Game).setDebugDraw(debugSprite)
}

在游戏类中:

public function setDebugDraw(debugSprite:flash.display.Sprite):void{

   var debugDraw:b2DebugDraw = new b2DebugDraw();
   debugDraw.SetSprite(debugSprite);
   _world.SetDebugDraw(debugDraw);

}

请注意,您将需要最新版本的 Starling。3 个月前,他们在 Starling 中添加了 stage 参数,没有它,它将无法工作。

这是我的来源:http: //forum.starling-framework.org/topic/how-to-draw-2d-elements-for-box2d-debug-draw

希望这可以帮助

将要

于 2011-12-29T16:11:01.400 回答
1

如果你想让 Box2D 在 flash 层上绘图,你可以这样做:

debugDraw.SetSprite(Starling.current.nativeOverlay);
于 2014-01-10T20:44:54.267 回答