2010-01-24 2 views
1

AS3 용 Box2d로 작은 게임을 만들었습니다 - 기본 Box2d 세계에서 자신의 위치를 ​​차지하는 스테이지에 스프라이트를 연결했습니다. 이 스프라이트는 대부분 PNG입니다.플래시의 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

내가 찾은 유일한 해결책은 Sprite에 디버그 데이터를 그려서 알파를 0으로 설정하고 무시하는 것입니다. – Reuben

답변

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은 성능을 많이 향상시킵니다.

+0

문제는 27fps가 디버그 데이터 드로잉, 그리고 19없이. 내 EnterFrame 함수에서이 줄을 주석으로 처리하고 있습니다. m_world.DrawDebugData(); –

0

작년에 box2d를 테스트 할 때 동일한 문제가있었습니다. 나는 alphafill을 설정하고 알파를 디버그 드로우의 0으로 설정합니다 : D 또는 조인트를 디버그하지 않도록 플래그를 제거 할 수 있습니다.

그냥 해결됩니다. 이제 box2d를 살펴볼 것입니다. debugdraw를 사용하여 동일한 성능을 얻는 해결책을 찾으면 알려드립니다.

나는 박스 2d 2.1a btw를 사용합니다.

관련 문제