我在box2d中使用DebugDraw时遇到问题,因为它集成在starling对象中。
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的问题 有没有人有解决方案?
答案 0 :(得分: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中,没有它,它就无法工作。
这是我的来源: http://forum.starling-framework.org/topic/how-to-draw-2d-elements-for-box2d-debug-draw
希望这有帮助
威尔
答案 1 :(得分:1)
如果你想在Flash2上绘制Box2D,你可以这样做:
debugDraw.SetSprite(Starling.current.nativeOverlay);