我用Box2d为AS3创建了一个小游戏 - 我有精灵附加到舞台上,从底层的Box2d世界中获取位置。这些精灵主要是巴布亚新几内亚。
当游戏使用DrawDebugData()运行时,每次更新都会调用它,它运行得很顺畅。然而,当我评论这个时,它运行起来很糟糕。在这两种情况下,我的所有精灵都被渲染出来。因此,当它绘制调试数据另外时,它似乎运行得更快(即在两种情况下我的精灵都在屏幕上!)
发生了什么事?绘制调试数据是否会弹出某种“渲染快速”开关?如果是的话,那是什么转换!?我在Box2D代码中看不到它。
function Update(e){
m_world.Step(m_timeStep, m_velocityIterations, m_positionIterations);
// draw debug?
m_world.DrawDebugData();
// with the above line in, I get 27fps, without it, I get 19fps.
// that's the only change that's causing such a huge difference.
doStuff();
}
有趣的是,如果我将调试绘制比例设置为与我的世界范围不同的值,它会减慢到19fps。所以当它在我的精灵下面绘制盒子时会发生一些事情,导致它运行得更快......
干杯,
盖
答案 0 :(得分:0)
private var gravity:b2Vec2 = new b2Vec2(0, 7.8);
private var doSleep:Boolean = false;
private var iterations:int = 10;
private var timeStep:Number = 1/30;
您可以与我们分享此设置吗? doSleep大大提高了性能
答案 1 :(得分:0)
去年测试box2d时遇到了同样的问题。我将alphafill和outline alpha设置为调试绘图的0:D或者你可以删除标志,这样它就不会调试关节等。
这只是一个解决方法。我现在要看看box2d。如果我找到一个解决方案来获得相同的性能w / o debugdraw,我告诉你。
我正在使用box2d 2.1a btw。