Trình chỉnh sửa cấp độ + Trò chơi -> Sao chép kết xuất / mã cụ thể của trò chơi?


14

Tôi đã đọc về cách thiết kế mã cho một trò chơi. Một điều tôi chưa thể tìm ra là - làm thế nào để bạn quản lý việc viết một trình soạn thảo cấp độ bên ngoài trò chơi (không phải là một 'trình soạn thảo cấp độ trong trò chơi') mà không cần 'sao chép' mã từ trò chơi? Ví dụ: bạn có thể phải sao chép tất cả mã về các loại thực thể khác nhau mà bạn có thể có. Bạn sẽ phải thêm mã kết xuất trò chơi.

Tôi đoán là điều này có thể được thực hiện bằng cách tạo một DLL ra khỏi phần 'engine' của trò chơi. Sau đó, chia sẻ nó giữa trò chơi thực tế và trình chỉnh sửa cấp độ.

Hoặc có một cách tốt hơn / dễ dàng hơn để làm điều này?

Câu trả lời:


13

Bạn sẽ phải tách mã của bạn thành các dự án riêng biệt (trong cùng một giải pháp). Thông thường bạn sẽ có các thiết lập sau:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

Đối với các dự án lớn hơn, bạn có thể muốn tách Core Engine trên nhiều dự án như Core, Vật lý, Đồ họa, Âm thanh, Đầu vào và Mạng. Tất cả các dự án này không thể tham chiếu lẫn nhau, nhưng tất cả chúng đều tham chiếu Core nơi bạn có thể lưu trữ một số loại cơ sở phổ biến.

Nếu họ tham chiếu lẫn nhau, sự tách biệt sẽ là vô ích.

Dù sao, điều này sẽ giúp bạn tái sử dụng các bộ phận của động cơ của bạn trong các dự án khác. Ví dụ, đối với trình soạn thảo, bạn sẽ cần tham chiếu dự án Đồ họa tham chiếu chính Core.

Sự tách biệt này cũng có nghĩa là bây giờ bạn có thể sử dụng các công nghệ Windows Only, như WPF, trong trình chỉnh sửa của mình trong khi trò chơi của bạn vẫn có thể nhắm mục tiêu Windows và XBLIG.

Để biết thêm thông tin về việc sử dụng XNA trong môi trường WPF, hãy xem liên kết này: http://bloss.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- của-a-wpf-application.aspx


Cảm ơn! Nhìn kỹ hơn một chút và tôi thấy điều này - created.msdn.com/en-US/education/catalog/sample/ mẹo - Có vẻ như WinForms được hỗ trợ tốt hơn WPF!
Utkarsh Sinha

Điều đó đúng, nhưng mẫu đó là từ năm 2008, trước khi WPF thực sự bắt đầu. Tôi đã chuyển từ WinForms sang WPF một năm trước và tôi sẽ không cho thế giới quay trở lại :). Nếu bạn muốn duy trì khả năng tương thích với mẫu đó, bạn luôn có thể sử dụng WinFormsControlhost trong ứng dụng WPF :).
Roy T.

4

Tách biệt logic kết xuất tốt nhất có thể khỏi logic trò chơi thực tế khi thiết kế công cụ trò chơi của bạn. Một cách để làm điều này là sử dụng mẫu Thành phần khi xây dựng công cụ trò chơi của bạn. Ví dụ, XNA sử dụng mẫu này ở cấp độ khung để linh hoạt. Sử dụng cùng một cơ sở mã để kết xuất với trình soạn thảo cấp độ của bạn; viết giấy gói nếu bạn phải.

Tương tự, một mẫu khá phổ biến khác là MVC (Model-View-Controller) cũng có thể giúp ích. Mã công cụ của bạn bằng cách sử dụng MVC bình thường. Sau đó, bạn có thể sử dụng cùng một mã cho Chế độ xem và Mô hình, nhưng thêm Trình điều khiển tùy chỉnh để chỉnh sửa Mô hình cho trình chỉnh sửa cấp của bạn thay vì Trình điều khiển của công cụ trò chơi cập nhật theo đầu vào trò chơi. Triển khai tuần tự hóa cho các Mô hình trò chơi để tải / lưu chúng từ trình chỉnh sửa hoặc trò chơi.

Giữ các thành phần trong các cụm riêng biệt tất nhiên sẽ khuyến khích tách ...

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.