Geleneksel oyun tasarımı bunu bildiğimiz gibi, kullanır biçimlilik ve sanal fonksiyonlar güncelleme oyun durumlarını nesneleri için. Başka bir deyişle, aynı sanal işlevler kümesi, oyundaki her nesne üzerinde düzenli (ör: kare başına) aralıklarla çağrılır.
Son zamanlarda, oyun nesnelerinin durumlarını güncellemek için başka bir olay güdümlü mesajlaşma sisteminin olduğunu keşfettim . Burada, nesneler genellikle çerçeve başına güncellenmez. Bunun yerine, oldukça verimli bir olay mesajlaşma sistemi oluşturulur ve oyun nesneleri yalnızca geçerli olay mesajı alındıktan sonra güncellenir.
Olay Odaklı Oyun Mimarisi iyi tanımlanmıştır: Mike McShaffry tarafından Komple Oyun Kodlama .
Aşağıdaki sorularla ilgili yardım isteyebilir miyim:
- Her iki yaklaşımın da avantajları ve dezavantajları nelerdir?
- Biri diğerinden daha iyi nerede?
- Etkinlik odaklı oyun tasarımı evrensel ve tüm alanlarda daha mı iyi? Bu nedenle mombile platformlarında bile kullanılması tavsiye edilir mi?
- Hangisinin daha verimli ve hangisinin geliştirilmesi daha zor?
Açıklığa kavuşturmak gerekirse, sorum polimorfizmi bir oyun tasarımından tamamen kaldırmakla ilgili değil. Ben sadece farkı anlamak ve oyun durumunu güncellemek için sanal işlevlere düzenli (çerçeve başına) çağrılar vs olay güdümlü mesajlaşma kullanarak faydalanmak istiyorum.
Örnek: Bu soru burada biraz tartışmaya neden oldu, bu yüzden size örnek sunmama izin verin: MVC'ye göre, oyun motoru üç ana bölüme ayrılmıştır:
- Uygulama Katmanı (Donanım ve İşletim Sistemi iletişimi)
- Oyun Mantığı
- Oyun Görünümü
Bir yarış oyununda, Oyun Görünümü, ekranı mümkün olan en kısa sürede, en az 30 kare / saniye olarak oluşturmaktan sorumludur. Game View, oyuncunun girdisini de dinler. Şimdi bu olur:
- Oyuncu yakıt pedalına% 80 basar
- GameView "Araba 2 Yakıt Pedalı% 80'e Basıldı" mesajını oluşturur ve Game Logic'e gönderir.
- Game Logic mesajı alır, değerlendirir, yeni arabanın konumunu ve davranışını hesaplar ve GameView için aşağıdaki mesajları oluşturur: "Car 2 Fuel Pedal Draw 80% Press", "Car 2 Sound Acceleration", "Car 2 Coordinates X, Y" .. .
- GameView mesajları alır ve buna göre işler
update
onları arayın ). İkincisi çeşitli nedenlerle mesajlaşma ile yapabilirsiniz.