Tôi đang làm một trò chơi đơn giản và đã quyết định thử thực hiện một hệ thống nhắn tin.
Hệ thống về cơ bản trông như thế này:
Thực thể tạo tin nhắn -> tin nhắn được đăng lên hàng đợi tin nhắn toàn cầu -> messageManager thông báo cho mọi đối tượng của tin nhắn mới thông qua onMessageReceured (Tin nhắn tin nhắn) -> nếu đối tượng muốn, nó sẽ hoạt động trên tin nhắn.
Cách tôi tạo các đối tượng tin nhắn là như thế này:
//base message class, never actually instantiated
abstract class Message{
Entity sender;
}
PlayerDiedMessage extends Message{
int livesLeft;
}
Bây giờ SoundManagerEntity của tôi có thể làm một cái gì đó như thế này trong phương thức onMessageReceured () của nó
public void messageReceived(Message msg){
if(msg instanceof PlayerDiedMessage){
PlayerDiedMessage diedMessage = (PlayerDiedMessage) msg;
if(diedMessage.livesLeft == 0)
playSound(SOUND_DEATH);
}
}
Ưu điểm của phương pháp này:
- Rất đơn giản và dễ thực hiện
- Tin nhắn có thể chứa nhiều thông tin như bạn muốn, bởi vì bạn chỉ cần tạo một lớp con Tin nhắn mới có bất kỳ thông tin nào cần thiết.
Nhược điểm:
- Tôi không thể tìm ra cách tôi có thể tái chế các đối tượng Tin nhắn thành một nhóm đối tượng , trừ khi tôi có một nhóm khác nhau cho mỗi lớp con của Tin nhắn. Vì vậy, tôi có rất nhiều phân bổ bộ nhớ / tạo đối tượng theo thời gian.
- Không thể gửi tin nhắn đến một người nhận cụ thể, nhưng tôi chưa cần điều đó trong trò chơi của mình nên tôi không bận tâm lắm.
Tôi đang thiếu gì ở đây? Phải có một triển khai tốt hơn hoặc một số ý tưởng mà tôi đang thiếu.