#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);