Hệ thống thành tựu có thể được thực hiện sau này trong phát triển?


12

Tôi chưa quyết định liệu tôi có muốn triển khai tính năng này trong trò chơi của mình hay không. Tôi không muốn dự án vượt ra khỏi tầm kiểm soát vì vậy trước tiên tôi tập trung vào cơ học chính.

Đây có phải là một tính năng dễ thực hiện sau này giả sử tôi điều khiển dữ liệu mọi thứ và lưu trữ mọi thứ?


3
Tôi đã chuyển một trò chơi DOS nổi tiếng nào đó sang windows vài năm trước - một trong những điều tôi rất muốn thêm vào nó, nếu chúng tôi thực hiện bất kỳ thay đổi nào về lối chơi - sẽ là thành tựu. Vì vậy, nếu tôi có thể thêm thành tích vào một trò chơi hơn 10 năm rõ ràng không được thiết kế cho nó, tôi sẽ nói khá nhiều rằng chúng có thể được thêm vào bất cứ đâu. Heck, trang web này có thành tích ..
Jari Komppa

Câu trả lời:


19

Bạn đang hỏi từ góc độ kỹ thuật thực hiện hoặc sự phân nhánh của thiết kế? Dù bằng cách nào, câu trả lời cho câu hỏi của bạn là "có".

Từ khía cạnh kỹ thuật của mọi thứ, nói chung, bạn chỉ cần tìm các móc trong mã của bạn đang phản ứng với các sự kiện thành tích của bạn và đặt mã theo dõi thống kê của bạn ở đó. Bạn có thể phải thêm một số điều mới nếu bạn đang theo dõi những thứ không chính xác là các sự kiện riêng biệt đã xảy ra trong trò chơi (ví dụ: X lượng giờ chơi).

Từ khía cạnh thiết kế của mọi thứ, tốt, thành tích là động lực thúc đẩy bên ngoài và thêm chúng không thực sự chơi quá nhiều vào vòng lặp trò chơi cốt lõi, ngoại trừ những người muốn tìm kiếm chúng. Vì vậy, họ khá an toàn bất kể.


Vâng, tôi đang làm điều này bây giờ. Khá dễ dàng để liên kết shotsFired++vào phần mà đạn mới được tạo ra và shotsHit++trong đó viên đạn tác động đến người chơi khác. Nó giúp tôi theo dõi ai đã bắn viên đạn nào (vì tôi sử dụng thông tin để theo dõi ai đã giết người, v.v.)
bobobobo

5

Với điều kiện là công cụ trò chơi của bạn được thiết kế tốt và sử dụng một số loại hệ thống sự kiện có thể quan sát được (nơi các sự kiện được tạo ra và lắng nghe bởi các bên quan tâm), sẽ khá dễ dàng để "cắm" một hệ thống thành tích vào thời điểm sau (bằng cách thêm người nghe thích hợp). Kiểu thiết kế này rất linh hoạt.


2

Như những người hiện có đã thêm câu trả lời tốt, hãy để tôi trả lời các tình huống chưa được khám phá.

Nếu bạn đang ở trong một vị trí mà bạn đã hoàn thành mã hóa trò chơi của mình và bây giờ bắt đầu viết mã thành tích và thấy rất phức tạp để duy trì quá nhiều biến số và đếm và xóa chúng tại một số sự kiện và những điều tương tự.

Bạn luôn có thể tạo một lớp (tốt nhất là singleton) để nhận tất cả các sự kiện. Bây giờ liệt kê tất cả những thành tựu của bạn. Sau đó liệt kê tất cả các sự kiện trò chơi cần được theo dõi. Ví dụ như danh sách hiện tại của tôi trông như thế này

KILL ENEMY - đi bộ, đạn PLAYER DEATH - fall_off, Health ENTER_ROOM, EXIT_ROOM, v.v.

Những chi tiết bổ sung như đi bộ, đạn có thể là thông số. Bây giờ có một hàm gọi là fireEvent trong lớp theo dõi Thành tích đó. Tìm kiếm tất cả các địa điểm trong mã nơi bạn cần fireEvents và gọi chức năng đó. Bây giờ làm phần còn lại của công việc bẩn trong lớp Thành tích. đây là cách an toàn nhất để không làm phiền thành tích mã và mã hiện có. Nó làm việc khá nhanh đối với tôi.


Đó là một giải pháp thực sự tốt cho việc thực hiện phát triển bài. Tôi sẽ ghi nhớ điều này vì tôi vẫn không chắc mình có muốn thực hiện nó không. Tôi có thể làm điều đó trong giai đoạn sau vì tôi không muốn phạm vi dự án của mình vượt khỏi tầm kiểm soát.
Bryan Harrington
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.