2011-07-03 6 views
0

GC 때문에 내 게임이 망가져 있으며 40ms에서 140ms 사이입니다. 내 게임이 스레드 또는 업데이트 또는 렌더링 스레드에 새로운 개체를 만들지 않아서 프로젝트를 제외하고 완전히 깨끗하다고 ​​확신합니다. 업데이트 방법에서 나는 List<TouchEvents> touchEvents = getTouchEvents(); 을 가지고 있습니다. GC가 GC가 될 때마다 (ACTION_MOVE 이벤트를 사용하여) 화면을 터치해야하므로 GC가 움직일 때마다 움직이는 것입니다. 어떻게 최적화하거나 예방합니까?Android 터치 이벤트 목록 및 가비지 컬렉터

편집 : 이제는 내 FPS 제한 방법과 관련 있다고 생각하기 시작했습니다. FPS를 30으로 제한하고 있기 때문에 GC에 게임을 방해하지 않고 충분한 시간이 없다고 가정합니다. 리미터를 뺐고 60FPS로 게임을 한 후에이 이론을 생각해 냈습니다. 60FPS에서 실행되지만 30FPS에서는 실행되지 않을 때 게임은 완벽하게 간다. 아이디어가 있으십니까?

+0

* 게임 논리 스레드 * 또는 * 렌더링 스레드 * 또는 아마도 * 둘 모두를 제한합니까? – Wroclai

+0

솔직히 말해서 나는 잘 모르겠다. FPS를 제한하는 방법을 온라인에서 찾은 다음 시도했을 때 작동하는 방법을 구현했습니다. 기본적으로 새 스레드에서 절전 시간을 만들고 "if 문"을 사용하여 절전 시간이 33보다 큰지 여부를 확인하고 스레드가 절전 시간을 인수로 사용하도록 설정했는지 확인합니다. 그런 다음 if 문 다음에 현재 화면에 대한 메서드를 업데이트하고 렌더링합니다. – semajhan

+0

음, 처음부터; 게임은 30FPS에서 망가져있을 것입니다. 더 높은 FPS에서 실행하고 싶지 않은 이유가 있습니까? 두 스레드를 모두 제한하는 것처럼 들리지만,이 경우 렌더링 및 게임 논리가 모두 30FPS로 업데이트됩니다. 나는 게임 논리 루프를 위해 적어도 100FPS를 권장하며, 렌더 루프가 가능한 한 빨리 실행되도록해야한다. (안드로이드의 화면이 V-synced이기 때문에 기본적으로 60FPS를 의미한다). – Wroclai

답변

0

개인적으로 fps를 캡핑하지 않는 것이 좋습니다. 대신 운동과 물리학을 할 때 가능한 한 빨리 달리고 경과 된 시간을 참조하십시오.

관련 문제