2013-05-03 4 views
1

좋아, 그래서 나는 캔버스와 스레딩을 사용하는 안드로이드에서 간단한 게임을 작업 해왔다. (SurfaceView를 확장하고 Runnable을 구현한다.)안드로이드 캔버스를 사용한 스프라이트 동작이 매우 느리다

내 실행 루프의 코드는 다음과 같습니다

@Override 
public void run() 
{ 
    while(running) 
    { 
     synchronized(holder) 
     { 
      if(!holder.getSurface().isValid()) 
      { 
       continue; 
      }//end if isValid() call 


      Update(); 
      Draw(); 

     } 
    }//end while 

}//end run() 

내가 빠르게 앞뒤로 화면을 가로 질러 이동하는 스프라이트를 갖고 싶어? 스프라이트의 "속도"를 1로 설정하면 각 업데이트마다 1 픽셀 씩 이동합니다. 따라서 20 또는 30fps로 업데이트하는 경우에도 스프라이트 (제 경우에는 100x80px 스프라이트)가 매초 20 또는 30 픽셀 씩 이동한다는 것을 의미합니다. 빨리 움직일 수있는 방법이 있습니까? 큰 권리를 소리 - 나는 예를 들어, 5 스프라이트의 "속도"를 변경하는 경우

: 여기

는 딜레마? 업데이트 할 때마다 5 픽셀 씩 이동하십시오. 그러나 그것은 매끄럽지 않을 것입니다 - 매번 5 픽셀 홉핑하기 때문에 draw() 호출 사이에는 부드러운 움직임이 없습니다.

분명히 프레임 속도보다 빠르게 움직이는 캔버스로 만든 게임에는 적과 NPC가 있습니다.

답변

0

는 메커니즘을 렌더링 및 업데이트 분할한다,이 링크는 도움이 http://android-er.blogspot.com/2010/05/android-surfaceview.html

PS는이 블로그는 내가

+0

내가 그리기의 렌더링 메커니즘을 가지고 이와 관련된하고 어느 쪽도 나에게 속하지하지 않는 것 같다()와 Update()의 메커니즘을 업데이트하십시오. Update에서 스프라이트의 위치를 ​​1로 변경 한 다음 그려지면 게임의 fps에 의해 제한됩니다. 일부 시스템에서는 문제가 늦어 질 때까지 문제가 있다고 생각합니다 (마지막 업데이트() 이후로 추적해야 함). 그러나이 경우 속도를 높이려면 어떻게해야합니까? 다소 혼란 스럽습니다. – Ginzorf

+0

그것은 메서드에 의해 분리, 당신은 별도의 스레드에 의해 그것을 분할해야합니다 :) 나는 내가 말한 메커니즘에 대해 자세히 알려주 링크를보십시오. –

관련 문제