Tôi đang bắt đầu dự án trò chơi 'phù hợp' đầu tiên của mình và chắc chắn tôi đã gặp phải một khối cố gắng quyết định cách các thành phần trò chơi trong XNA nên giao tiếp.
Từ các sự kiện lập trình GUI (Java) trước đây, trình xử lý và trình nghe dường như là con đường phía trước. Vì vậy, tôi có một số loại xe buýt sự kiện chấp nhận đăng ký sự kiện và các lớp đã đăng ký vào các sự kiện đó, với các trình xử lý để đối phó với chúng. Ví dụ (mã giả):
class SpriteManager
Update(){
if(player.collidesWith(enemy)
// create new 'PlayerCollisionEvent'
}
class HUDManager
onPlayerCollisionEvent(){
// Update the HUD (reduce lives etc)
}
Tuy nhiên, tôi không chắc chắn về thiết lập mã (trong C #) sẽ được yêu cầu để thực hiện đầy đủ điều này. Điều gì theo dõi các sự kiện (một số loại xe buýt?), Và nó được cấu trúc như thế nào?
Dường như cũng có rất nhiều đề cập về Dịch vụ trò chơi, theo đó bạn có thể đăng ký GameComponent trong lớp Game.cs chính của mình, sau đó tìm nạp nó từ bất kỳ đâu trong mã của bạn có tham chiếu đến đối tượng 'Trò chơi' chính. Tôi đã thử điều này với đối tượng SpriteBatch của tôi và nó có vẻ rất dễ dàng .. tuy nhiên, tôi không thể thấy điều này linh hoạt như một mô hình sự kiện.
Lấy ví dụ khi kẻ thù chết. Chúng tôi muốn cập nhật điểm số trò chơi. Sử dụng các dịch vụ tôi có thể có được một tham chiếu đến đối tượng StateManager của mình được tạo trong Game1 và được thêm dưới dạng dịch vụ, sau đó đặt 'điểm' thành giá trị mới. Tôi nghĩ rằng một sự kiện 'onEnemyDeath', có thể được xử lý khác nhau bởi vô số các lớp, nhưng được khởi tạo bởi 1 dòng mã trong phần 'phát hiện tử vong kẻ thù' có liên quan, sẽ tốt hơn so với việc chọn từng GameComponent được yêu cầu phương pháp được yêu cầu.
Hay là những chiến lược thấp kém hơn một cái gì khác?
Tôi nhận ra đây là một phần kiến thức C # kém của tôi cũng giống như mô hình giao tiếp trò chơi, nhưng tôi thực sự muốn có được điều cơ bản này ngay.
Cập nhật
Nhìn vào Dịch vụ chi tiết hơn tôi thấy ít thuyết phục hơn - về cơ bản nó đang chuyển một biến toàn cầu (từ những gì tôi hiểu).
Cập nhật 2
Đã xem hướng dẫn cơ bản này về xử lý sự kiện và kiểm tra mã mẫu, có vẻ như các sự kiện sẽ là một lựa chọn hợp lý cho những gì tôi đang thảo luận. Nhưng tôi không thể sử dụng nó nhiều trong các mẫu tôi đã thấy. Có một số lý do rõ ràng tại sao một người không nên?