as3 скворец используя box2d - PullRequest
1 голос
/ 08 ноября 2011

У меня проблема с использованием DebugDraw в box2d, когда он интегрирован в объект 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.есть решение?

Ответы [ 2 ]

1 голос
/ 11 января 2014

Если вы хотите, чтобы Box2D рисовал на слое флэш-памяти, вы можете сделать это:

debugDraw.SetSprite(Starling.current.nativeOverlay);
1 голос
/ 29 декабря 2011

Я знаю, что эта угроза уже устарела, но я только что столкнулся с этой проблемой сам.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 месяца назад они добавили параметр stage в Starling, без него он не будет работать.

Это был мой источник: http://forum.starling -framework.org / topic / how-to-draw-2d-elements-for-Box2D-Debug-Draw

Надеюсь, это поможет

Будет

...