1

starling オブジェクトに統合されている場合、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

Box2D でフラッシュ レイヤーに描画する場合は、次のようにします。

debugDraw.SetSprite(Starling.current.nativeOverlay);
于 2014-01-10T20:44:54.267 に答える
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

お役に立てれば

意思

于 2011-12-29T16:11:01.400 に答える