2011-09-27 4 views
3

나는 자바로 게임을 쓰고있다. 그리고 오, 내가 성능 문제가 있는지 궁금해. 나는 페인트 그 자체를 벤치마킹했다 - 3 ms의 탑에서 1000 사이클. 게임 로직은 그 아래에 있습니다. 여태까지는 그런대로 잘됐다. 하지만 난 여전히 성가신 지연이 발생합니다 : 스크롤 할 때, 확대 할 때, 클릭 할 때. 줌 인하면 더 많은 물체를 놓으면 문제가 악화됩니다. 하지만 여전히 - 회화를 1000 번 반복하더라도 시차가 더 많거나 적게 같으므로 그럴 수 없습니다. 루프를 작업에 넣으려고했지만 여전히 동일합니다. 나는 페인트 사이의 작업을 일시 중지하려고 시도했습니다. 여전히 동일합니다. 애니메이션은 실크처럼 매끄럽게 실행됩니다 (프레임 속도가 안정적이고 높기 때문에 의미가 있습니다). 그렇다면 어떻게하면 입력을 체계적으로 정리할 수 있습니까? 그들 모두를 별도의 실에 넣으시겠습니까? 모든 입력은 매우 감사하겠습니다!자바 게임의 지연

+4

3ms에서 1000주기. 확실합니까? 333000 fps입니다. – toto2

+2

"페인트 사이에 작업을 일시 중지"할 때 전체 Swing (또는 AWT) 이벤트 스레드를 일시 중지하지 않았습니까? – toto2

+0

이제는 333000fps가 약간의 소리를냅니다 ... 틀림없이 그게 틀림 없어요;) – julian

답변

9

UI 업데이트가 수행되는 Swing Event Dispatch Thread에서 직접 리스너 콜백을 사용하는 것처럼 들립니다. 명령 대기열을 사용하고 콜백이 호출 될 때 대기열에 이벤트를 넣어야합니다 (명령의 특성에 따라 다름). 그런 다음 EDT와 관련이없는 기본 게임 업데이트 루프에서이를 사용해야합니다.

+0

지금 당장 시도 할 수는 없지만 실제로이 트릭을해야합니다. 감사! – julian

+1

그것을 시도, 루크 매력에 작동합니다. 백만 번 감사드립니다! – julian