Tôi đang thiết kế một trò chơi đơn giản, sử dụng vật lý Java 2D và Newton. Hiện nay chính "trò chơi vòng lặp" của tôi trông giống như sau:Thiết kế trò chơi theo cách OO
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
Khi một thực thể được hướng dẫn để cập nhật bản thân nó sẽ tự điều chỉnh tốc độ và vị trí của nó dựa trên các lực lượng hiện tại áp dụng cho nó. Tuy nhiên, tôi cần các thực thể để thể hiện hành vi khác; ví dụ. nếu một "kẻ xấu" bị bắn bởi một người chơi thì thực thể đó sẽ bị phá hủy và bị loại bỏ khỏi thế giới game.
Câu hỏi của tôi: Cách tốt nhất để đạt được điều này theo cách hướng đối tượng là gì? Tất cả các ví dụ tôi đã thấy cho đến nay kết hợp vòng lặp trò chơi vào lớp Thiên Chúa được gọi là Game
, thực hiện các bước sau: phát hiện va chạm, kiểm tra nếu bị giết chết, kiểm tra nếu người chơi bị giết, sơn lại , vv và đóng gói tất cả trạng thái trò chơi (cuộc sống còn lại, v.v.). Nói cách khác, nó rất thủ tục và tất cả logic nằm trong lớp Trò chơi. Bất cứ ai có thể giới thiệu một cách tiếp cận tốt hơn?
Dưới đây là các tùy chọn Tôi đã nghĩ đến việc cho đến nay:
- Vượt qua một
GameContext
cho từng đối tượng mà từ đó các thực thể có thể loại bỏ chính nó nếu cần thiết hoặc cập nhật trạng thái của game (ví dụ để "không chạy" nếu người chơi bị giết). - Đăng ký mỗi
GameEntity
làm người nghe đến lớp học trung tâmGame
và thực hiện phương pháp tiếp cận theo hướng sự kiện; ví dụ. va chạm sẽ dẫn đến việcCollisionEvent
bị bắn cho hai người tham gia trong vụ va chạm.
Tôi nghĩ rằng tôi đã tìm thấy lỗi của bạn - đó là 'while (gameRunning) 'bạn muốn có –