2011-01-08 6 views
0

기본적으로 내 질문은 제목에 있습니다 : 내 게임에서 100 % CPU를 사용하고 LunarLander 예가 왜 사용하지 않습니까?내 게임이 100 % CPU 및 LunarLander를 사용하지 않는 이유는 무엇입니까?

내 게임은 현재 게임 루프와는 별도의 스레드로 while 루프() 루프에서 물리/이벤트를 업데이트하고 화면을 계속 그리는 등 LunarLander 예제와 거의 동일합니다.

그러나 LunarLander를 실행하고 디버그 도구를 활성화하면 약 50 %의 CPU 사용량을 표시합니다 (에뮬레이터는 듀얼 코어 PC에서 약 25 %를 사용함). 내 자신의 게임은 CPU의 100 %를 사용합니다 (내 PC에서는 에뮬레이터 50 %).

CPU로드를 줄이고 게임 성능을 향상 시키길 원하거나 필요하지는 않습니다 (에뮬레이터 및 느린 전화기에서 약간 느려지기도하지만). 왜 그 이유를 이해하지 못합니까? LunarLander 예제는 100 %를 사용하지 않습니까? 기본적으로 물리학을 업데이트하고 화면을 계속 끌어 당기는 while (true) 루프가 있습니다. 왜 그것이 100 %에 미치지 못합니까?

내 게임도 비슷합니다. 게임 상태를 메소드에서 업데이트 한 다음 모든 것을 화면에 그립니다. 먼저 배경 이미지, 그 다음에 몇 개의 다른 이미지 (LunarLander 예제는 비트 맵을 사용하는 동안 Drawables를 사용합니다. 왜냐하면 변환 할 필요가없고 더 빨라야하기 때문입니다). 게임과 상호 작용하지 않을 때는 아무 일도 일어나지 않으며 상호 작용은 이벤트를 통해 이루어지며 주 루프에서도 수행되지 않습니다.

아이디어가 있으십니까? :-)

+1

"내 게임은 현재 LunarLander 예제와 거의 동일합니다."- 어떻게 다릅니 까? 코드가 많은 도움이 될 것입니다. – fredley

+2

글쎄, 나는 몇 천 줄의 코드를 게시 할 수 있지만 아무도 행복하게 만들 수는 없다. 다른 비트 맵을로드하고 그릴 때와 다른 점이 있습니다. 나는 ontouchlistener를 가지고있어서 다른 위치에 배경을 그려 움직일 때 오프셋을 설정한다. 그리고 변형 된 Drawable이 아닌 ArrayList에서 비트 맵 타일을 그립니다. 그리고 그것에 관한 것입니다. 전체 구조 (게임 루프, update() 메소드, draw() 메소드 용 스레드)는 동일합니다. – pbean

+0

아마도 CPU 부하를 줄이기를 원할 것입니다. 모바일 하드웨어에 가하는 부하는 사용자가 소비 할 배터리 전력의 양과 직접 관련이 있습니다. – adamp

답변

1

모든 스레드가 코어의 100 % 미만을 사용할 수있는 유일한 방법은 I/O가 포함되어 있거나 절전 모드이거나 다른 스레드와 경쟁 중이거나 시간을 일부 중단하는 경우입니다. 그래서 만약 당신이 pause the lunar lander 몇 번, 당신은 그것이 어떻게 일시 중지 볼 수 있습니다.

관련 문제