Saya membuat game sederhana, dan telah memutuskan untuk mencoba menerapkan sistem pesan.
Sistem pada dasarnya terlihat seperti ini:
Entity menghasilkan pesan -> pesan diposting ke antrian pesan global -> messageManager memberitahukan setiap objek pesan baru melalui onMessageReceived (Pesan Pesan) -> jika objek ingin, ia bertindak pada pesan.
Cara saya membuat objek pesan adalah seperti ini:
//base message class, never actually instantiated
abstract class Message{
Entity sender;
}
PlayerDiedMessage extends Message{
int livesLeft;
}
Sekarang SoundManagerEntity saya dapat melakukan sesuatu seperti ini dalam metode onMessageReceived ()
public void messageReceived(Message msg){
if(msg instanceof PlayerDiedMessage){
PlayerDiedMessage diedMessage = (PlayerDiedMessage) msg;
if(diedMessage.livesLeft == 0)
playSound(SOUND_DEATH);
}
}
Pro untuk pendekatan ini:
- Sangat sederhana dan mudah diimplementasikan
- Pesan dapat berisi informasi sebanyak yang Anda inginkan, karena Anda dapat membuat subkelas pesan baru yang memiliki informasi apa pun yang diperlukan.
Kontra:
- Saya tidak tahu bagaimana saya bisa mendaur ulang objek Pesan ke kumpulan objek , kecuali jika saya memiliki kumpulan yang berbeda untuk setiap subkelas Pesan. Jadi saya punya banyak dan banyak objek penciptaan / alokasi memori dari waktu ke waktu.
- Tidak dapat mengirim pesan ke penerima tertentu, tetapi saya belum membutuhkannya di game saya jadi saya tidak terlalu keberatan.
Apa yang kulewatkan di sini? Harus ada implementasi yang lebih baik atau beberapa ide yang saya lewatkan.