Tôi đang làm việc trên trò chơi topdown 2d trong SFML 2 và cần tìm một cách thanh lịch để mọi thứ sẽ hoạt động và khớp với nhau.
Cho phép tôi giải thích. Tôi có một số lớp kế thừa từ một cơ sở trừu tượng cung cấp phương thức vẽ và phương thức cập nhật cho tất cả các lớp.
Trong vòng lặp trò chơi, tôi gọi cập nhật và sau đó rút ra từng lớp, tôi tưởng tượng đây là một cách tiếp cận khá phổ biến. Tôi có các lớp cho gạch, va chạm, trình phát và trình quản lý tài nguyên có chứa tất cả các ô / hình ảnh / kết cấu. Do cách thức hoạt động của đầu vào trong SFML, tôi đã quyết định để mỗi lớp xử lý đầu vào (nếu cần) trong cuộc gọi cập nhật của nó.
Cho đến bây giờ tôi đã chuyển qua các phụ thuộc khi cần thiết, ví dụ, trong lớp người chơi khi nhấn phím di chuyển, tôi gọi một phương thức trên lớp va chạm để kiểm tra xem vị trí mà người chơi muốn di chuyển có bị va chạm không, và chỉ di chuyển người chơi nếu không có va chạm.
Điều này hoạt động tốt với hầu hết các phần, nhưng tôi tin rằng nó có thể được thực hiện tốt hơn, tôi chỉ không chắc làm thế nào.
Bây giờ tôi có những thứ phức tạp hơn mà tôi cần phải thực hiện, ví dụ: người chơi có thể đi tới một vật thể trên mặt đất, nhấn một phím để nhặt / cướp nó và sau đó nó sẽ hiển thị trong kho. Điều này có nghĩa là một vài điều cần phải xảy ra:
- Kiểm tra xem người chơi có ở trong phạm vi của một vật phẩm có thể cướp được trên phím nhấn hay không, không thì tiếp tục.
- Tìm vật phẩm.
- Cập nhật kết cấu sprite trên vật phẩm từ kết cấu mặc định của nó thành kết cấu "bị cướp phá".
- Cập nhật xung đột cho vật phẩm: nó có thể đã thay đổi hình dạng hoặc bị xóa hoàn toàn.
- Hàng tồn kho cần được cập nhật với các mục được thêm vào.
Làm thế nào để tôi làm cho mọi thứ giao tiếp? Với hệ thống hiện tại của tôi, tôi sẽ kết thúc với các lớp học của mình vượt ra ngoài phạm vi và các cuộc gọi phương thức với nhau ở mọi nơi. Tôi có thể kết nối tất cả các lớp trong một trình quản lý lớn và cung cấp cho mỗi lớp một tham chiếu đến lớp trình quản lý cha mẹ, nhưng điều này có vẻ chỉ tốt hơn một chút.
Bất kỳ trợ giúp / lời khuyên sẽ được đánh giá rất cao! Nếu bất cứ điều gì không rõ ràng, tôi rất vui khi mở rộng mọi thứ.