턴 기반 게임 내에서 애니메이션을 월드 상태와 분리하는 것을 어떻게 처리합니까? 현재 2D 그리드 기반 게임을 만들고 있습니다. 아래 코드는 더 잘 설명하기 위해 단순화되었습니다.
액터가 움직일 때, 생물이 움직이고 새로운 위치로 움직일 때 회전 흐름을 멈추고 싶습니다. 그렇지 않으면 화면이 월드 상태보다 크게 지연되어 시각적으로 이상하게 보일 수 있습니다. 또한 게임의 흐름을 차단하지 않는 애니메이션을 원합니다. 파티클 효과는 게임 플레이에 영향을 미치지 않고 여러 차례에 걸쳐 펼쳐질 수 있습니다.
내가 한 것은 블로킹 애니메이션과 비 블로킹 애니메이션이라고하는 두 가지 유형의 애니메이션을 소개하는 것입니다. 플레이어가 움직이기를 원할 때 실행되는 코드는
class Actor {
void move(PositionInfo oldPosition, PositionInfo newPosition) {
if(isValidMove(oldPosition, newPosition) {
getGame().pushBlockingAnimation(new MoveAnimation(this, oldPosition, newPosition, ....));
player.setPosition(newPosition);
}
}
}
그런 다음 기본 업데이트 루프는 다음을 수행합니다.
class Game {
void update(float dt) {
updateNonBlockingAnimations(dt); //Effects like particle explosions, damage numbers, etc. Things that don't block the flow of turns.
if(!mBlockingAnimations.empty()) {
mBlockingAnimations.get(0).update(dt);
} else {
//.. handle the next turn. This is where new animations will be enqueued..//
}
cleanUpAnimations(); // remove finished animations
}
}
애니메이션이 액터의 화면 위치를 업데이트합니다.
내가 구현하고있는 또 다른 아이디어는 동시 차단 애니메이션을 사용하는 것입니다. 여기에서 여러 차단 애니메이션이 동시에 업데이트되지만 다음 차례는 모두 완료 될 때까지 발생하지 않습니다.
이것은 일을하는 제정신 방법처럼 보입니까? 누구든지 다른 유사한 게임이 어떻게 그런 일을하는지에 대한 제안이나 언급이 있습니까?