запуск as3 с использованием box2d

#actionscript-3 #box2d #starling-framework

#actionscript-3 #box2d #starling-фреймворк

Вопрос:

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

Комментарии:

1. В чем заключается ваш вопрос? Какие-нибудь ошибки?

Ответ №1:

Я знаю, что эта угроза уже немного устарела, но я сам только что столкнулся с этой проблемой. debugDraw.SetSprite() ожидает flash.display.Спрайт. Старлинг использует starling.display.Спрайт;

Если вы используете flash.display.Спрайт, тогда вы не сможете добавить его на сцену!

Это обходной путь, который я нашел:

В основном классе:

 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

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

Будет

Комментарии:

1. Также здесь следует отметить добавление flash.display. Спрайт над этапом запуска замедлит работу вашего приложения. Чтобы в полной мере использовать starling, убедитесь, что вы удалили его со сцены при публикации, а не просто отключили.

Ответ №2:

Если вы хотите, чтобы Box2D рисовал на слое flash, вы можете сделать это:

 debugDraw.SetSprite(Starling.current.nativeOverlay);