문제

J2ME 게임 개발에 대해 일련의 질문을했고 최근에는 Neil Coffey가 말했습니다.

부수적 인 문제로- J2ME 게임에서 100 개의 진드기/초를 원하십니까? 내가 SB가 언급했듯이, 당신은 또한 매번 고정 된 기간이 아니라 다음으로 원하는 웨이크 업 포인트로 자야합니다.

어떤 이유로, 그 일은 내 마음에 갇히고 이제 나는 답을 원합니다. 원하는 모닝 포인트, 나는 그 지점 XD (이론적으로 말하면) 어디에 있는지 정말로 모른다.

피드백을 위해 이것은 내 Gameloop의 단순화 된 버전입니다.

public void run() {
    Graphics g = this.getGraphics();
    while (running) {
        long diff = System.currentTimeMillis() - lastLoop;
        lastLoop = System.currentTimeMillis();
        input();
        this.level.doLogic();
        render(g, diff);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            stop(e);
        }
    }
}

당신의 도움을 주셔서 감사합니다!!

도움이 되었습니까?

해결책

10 밀리 초마다 렌더링하기로 결정하면 다음과 같습니다.

loop {
  - record current time; render
  - do input/logic
  - check the current time, and calculate elapsed time
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}

타이머 해상도에 문제가있을 수 있음을 이해합니다 (예 : Thread.Sleep (10)는 정확히 10ms에서 잠을 자지 못할 수 있으며 System.CurrentTimeMillis ()는 세분성으로 1ms까지 결과를 반환하지 않을 수 있습니다). 이것은 플랫폼 의존적입니다.

다른 팁

게임 루프에 대한 훌륭한 기사가 있습니다 여기, 당신이 그것을 아직 읽지 않았다면.

J2ME 게임을 작성한 경험에서 나온 게임 루프가 전화기를 빠르게 배출 할 수 있으므로 게임 루프에서 얼마나 많은 일을하는지 최소화하고 싶을 것입니다. 즉, 10 밀리 초에 렌더링하는 경우 변경 사항이 변경되었는지 확인하고 그렇지 않은 경우 건너 뛰십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top