Sıra tabanlı bir oyunda animasyonun dünya devletinden ayrılmasını nasıl ele alıyorsunuz? Şu anda 2B ızgara tabanlı bir oyun üzerinde çalışıyorum. Aşağıdaki kod daha iyi açıklamak için basitleştirilmiştir.
Bir aktör hareket ettiğinde, yaratık canlanırken ve yeni konuma taşınırken dönüş akışını duraklatmak istiyorum. Aksi takdirde, ekran dünya durumunun önemli ölçüde gerisinde kalabilir ve bu da garip görsel görünüme neden olabilir. Ayrıca oyunun akışını engellemeyen animasyonlara sahip olmak istiyorum - bir parçacık efekti, oyunu etkilemeden çoklu dönüşlerde ortaya çıkabilir.
Yaptığım şey, engelleme animasyonları ve engellemeyen animasyonlar olarak adlandırdığım iki tür animasyon tanıtmak. Oyuncu hareket etmek istediğinde, yürütülen kod
class Actor {
void move(PositionInfo oldPosition, PositionInfo newPosition) {
if(isValidMove(oldPosition, newPosition) {
getGame().pushBlockingAnimation(new MoveAnimation(this, oldPosition, newPosition, ....));
player.setPosition(newPosition);
}
}
}
Ardından ana güncelleme döngüsü şunları yapar:
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
}
}
... burada animasyon Aktörün ekran konumunu günceller.
Uyguladığım diğer bir fikir, birden fazla engelleme animasyonunun aynı anda güncelleneceği eşzamanlı bir engelleme animasyonuna sahip olmaktır, ancak bir sonraki dönüş hepsi tamamlanana kadar gerçekleşmez.
Bu bir şeyler yapmanın akılcı bir yolu gibi mi görünüyor? Herkes herhangi bir öneri, hatta diğer benzer oyunların böyle bir şey yapmak için referanslar var mı.