2013-02-23 4 views
1

다음은 Android 앱에 구현 한 게임 루프 코드입니다.캡핑 프레임 - 비율

잘 작동하지만 문제는 30에서 로직 업데이트를 캐핑해도 문제가되지 않는다는 것입니다. 실제 렌더링은 배터리 수명에 좋지 않은 편입니다.

렌더링을 고정 된 양 (예 : 30fps 정도)으로 제한하거나 제한하는 방법을 알아낼 수 없습니다.

특히 렌더링은 중복 프레임을 렌더링하는 대신 (즉, 로직 업데이트가 발생하지 않은 경우) 로직이 업데이트 된 경우에만 렌더링해야합니다.

편집 : 방금 코드의 보간 부분을 추가했습니다. @Geobits에서 권장 한대로 프레임을 캡핑 할 때 문제가 될 수 있습니까?

int TICKS_PER_SECOND = 30; 
int SKIP_TICKS = 1000/TICKS_PER_SECOND; 
int MAX_FRAMESKIP = 10; 

long next_game_tick = GetTickCount(); 
int loops; 

bool game_is_running = true; 
while(game_is_running) { 

    loops = 0; 
    while(GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) { 
     update_game(); 

     next_game_tick += SKIP_TICKS; 
     loops++; 
    } 
    interpolation = float(GetTickCount() + SKIP_TICKS - next_game_tick) 
        /float(SKIP_TICKS); 
    display_game(interpolation); 
} 

답변

0

는 프레임 속도를 모자 수있는 몇 가지 방법이 있습니다,하지만 당신이 원하는 모든 경우 : 논리 대신 중복 프레임을 렌더링의 업데이트하면

구체적 렌더링은 렌더링한다 (즉, , 로직 업데이트가 발생하지 않은 경우).

그러면 간단한 부울 플래그를 설정할 수 있습니다. update_game()에서 true로 설정하고 onDraw()에서 확인하십시오. false 인 경우 화면을 그리거나 지우지 않고 반환하십시오. 사실이라면 그림을 그리고 거짓으로 설정하십시오.

+0

감사합니다. @Geobits, 이것을 구현했는데 작동합니다 (확인 된 렌더링 및 게임 업데이트는 초당 동일한 시간에 발생합니다).하지만 내 스프 라이트의 '저크니스'가 발생합니다.이 원인이 무엇인지 알 수 있습니까? 그것을 피하는 방법? 다시 한 번 감사드립니다. – Zippy