1

AS3 用の Box2d を使用して小さなゲームを作成しました。基盤となる Box2d ワールドから位置を取得するスプライトをステージにアタッチしています。これらのスプライトはほとんどが PNG です。

更新ごとに 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 まで遅くなります。そのため、スプライトの下にボックスを描画すると何かが発生し、実行が速くなります..

乾杯、

4

2 に答える 2

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 はパフォーマンスを大幅に向上させます

于 2010-01-24T14:33:46.200 に答える
0

昨年box2dをテストしたときも同じ問題がありました。デバッグ描画の alphafill と Outline alpha を 0 に設定します:D またはフラグを削除して、ジョイントなどをデバッグしないようにすることもできます。

それは単なる回避策です。今、box2d を調べます。debugdrawなしで同じパフォーマンスを得るための解決策を見つけたら、教えてください。

ところでbox2d 2.1aを使用しています。

于 2010-05-01T08:35:54.313 に答える