Làm thế nào để bạn xử lý việc tách hoạt hình khỏi trạng thái thế giới trong một trò chơi theo lượt? Hiện tôi đang làm việc trên một trò chơi dựa trên lưới 2D. Các mã dưới đây được đơn giản hóa để giải thích tốt hơn.
Khi một diễn viên di chuyển, tôi muốn tạm dừng dòng chảy trong khi sinh vật hoạt hình và di chuyển đến vị trí mới. Nếu không, màn hình có thể tụt hậu đáng kể so với trạng thái thế giới, điều này sẽ gây ra sự xuất hiện hình ảnh kỳ lạ. Tôi cũng muốn có những hình ảnh động không chặn dòng chảy của trò chơi - một hiệu ứng hạt có thể mở ra qua nhiều lượt mà không ảnh hưởng đến trò chơi.
Những gì tôi đã làm là giới thiệu hai loại hình động, mà tôi gọi là hình động chặn và hình động không chặn. Khi người chơi muốn di chuyển, mã được thực thi là
class Actor {
void move(PositionInfo oldPosition, PositionInfo newPosition) {
if(isValidMove(oldPosition, newPosition) {
getGame().pushBlockingAnimation(new MoveAnimation(this, oldPosition, newPosition, ....));
player.setPosition(newPosition);
}
}
}
Sau đó, vòng lặp cập nhật chính hiện:
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
}
}
... Nơi hoạt hình cập nhật vị trí màn hình của Diễn viên.
Một ý tưởng khác mà tôi đang thực hiện là có một hoạt ảnh chặn đồng thời, trong đó nhiều hoạt ảnh chặn sẽ được cập nhật đồng thời, nhưng lượt tiếp theo sẽ không xảy ra cho đến khi tất cả chúng được thực hiện.
Điều này có vẻ như một cách lành mạnh để làm việc? Có ai có bất kỳ đề nghị, hoặc thậm chí tham khảo về cách các trò chơi tương tự khác làm điều đó.