PlayN Game Loop

PlayN은 게임의 메인 루프 진행을 위한 단순한 인터페이스를 제공한다. 이것은 플랫폼 간의 타이밍 구현의 복잡성을 분리하고, 논리적인 업데이트와 렌더링 업데이트의 분리를 추상화한다. 이 글은 PlayN의 구현과 게임의 메인 업데이트 사이클 예제를 설명한다.

게임 루프의 진행

모든 PlayN 게임은 단순히 update와 paint 메소드를 포함한 Game 인터페이스를 구현한다. Game 인터페이스를 구현하고 PlayN.run(game)을 호출하면 다음 두 메소드를 영원히 호출하는 게임 루프를 통제하는 것을 포기해야 한다.

1
2
3
4
while (true) {
game.update(...);
game.paint(...);
}

물론 가능한 한 빠르게 동작하지는 않지만, 플랫폼이 실제로 프레임을 표시할 수 있는 정도로 제한된다. 프레임이 얼마나 빨리 표시 되는지는 갱신률이나, 플랫폼 특유의 최대 표시율에 따라 제한된다.
그러나 두 개의 특정 주기인 표시 주기와 갱신 주기를 고려해야 한다. 상대적으로 단순한 갱신 로직을 가진 게임은 다음과 같이 만들 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyGame implements Game {
public void update(float delta) {
// Update the game's state.
// 'delta' is the time in milliseconds since the last update call.
}
public void paint(float alpha) {
// Paint using the game's current state.
// 'alpha' will always be zero. Ignore it.
}
public int updateRate() {
// Returning zero here explicitly requests an update() call for each frame.
return 0;
}
}

원문: https://developers.google.com/playn/devguide/gameloop

Share Comments