【问题标题】:as3 starling using box2das3 八哥使用 box2d
【发布时间】:2014-07-14 17:37:36
【问题描述】:

当 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 时遇到问题 有人有解决方案吗?

【问题讨论】:

  • 您的问题是什么?有什么错误吗?

标签: actionscript-3 box2d starling-framework


【解决方案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 中添加了 stage 参数,没有它,它将无法工作。

这是我的来源: http://forum.starling-framework.org/topic/how-to-draw-2d-elements-for-box2d-debug-draw

希望对你有帮助

【讨论】:

  • 这里还有一点需要注意,在 starling stage 上方添加 flash.display.Sprite 会减慢您的应用程序的速度。要充分利用 Starling,请确保在发布时将其从舞台上移除,而不是仅仅禁用它。
【解决方案2】:

如果你想让 Box2D 在 flash 层上绘图,你可以这样做:

debugDraw.SetSprite(Starling.current.nativeOverlay);

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多