as3 starling使用box2d

时间:2011-11-08 15:17:16

标签: actionscript-3 box2d starling-framework

我在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的问题 有没有人有解决方案?

2 个答案:

答案 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);