Thiết kế cấp độ trong trò chơi với XNA?


10

Tôi đang tự hỏi về thiết kế cấp trong trò chơi. Tình huống hiện tại của tôi xoay quanh Tiled - Tôi có nhiều lớp khác nhau với các loại đối tượng khác nhau (đối với bất kỳ ai không quen thuộc với Tiled, một đối tượng không có gì khác hơn là tọa độ với các thuộc tính tùy ý được gán cho nó).

Tôi hiện đang biên dịch lại trò chơi mỗi lần tôi thực hiện một chút thay đổi cho tệp bản đồ của mình để xem mọi thứ có được định vị đúng không. Có cách nào để tôi tự động tải lại cấp độ nếu phát hiện thay đổi tệp bản đồ không? XNA thậm chí có cho phép điều này không, hay cách thức hoạt động của đường ống nội dung không cho phép nội dung động theo cách như vậy? Bất kỳ lời khuyên hoặc đề nghị là hoàn toàn hoan nghênh.

Câu trả lời:


8

Tôi giả sử các tệp bản đồ của bạn được xử lý thông qua Đường ống nội dung và sau đó được tải khi chạy với Content.Load. Bạn có hai lựa chọn:

  • Lưu bản đồ của bạn dưới dạng tệp XML, qua MiddleSerializer.Serialize. Sau đó, tại thời gian chạy, bạn có thể đọc chúng với MiddleSerializer.Deserialize để xem các thay đổi.
  • Đây là một điều khó khăn hơn: gọi MSBuild trong thời gian chạy để biên dịch lại các tệp của bạn thành các XNB thích hợp và tải lại chúng bằng Trình quản lý nội dung. Mẫu này làm điều đó.

Giữa hai người, tôi chắc chắn tôi sẽ có thể sắp xếp thứ gì đó. Cảm ơn bạn!
Christopher Horenstein

2

Bạn cũng có thể sử dụng Karvonite nếu bạn muốn có được điều này và đi rất nhanh.

Đó là một khung kiên trì nhanh nhẹn. Tôi không chắc phiên bản mới sẽ hoạt động trên windows phone 7 hay xbox.

Bạn sẽ tạo một định nghĩa bền vững với trình soạn thảo kiên trì của họ (khá dễ dàng, bạn chỉ cần nhập cụm và kiểm tra các trường / thuộc tính trên các lớp / cấu trúc bạn muốn duy trì) Bạn khởi tạo ObjectSpace trong mã và thêm / xóa / lấy các đối tượng từ nó . (những đối tượng này vẫn tồn tại)

Nếu bạn có thể tạo ra một sự trừu tượng để công cụ gạch hoặc bất cứ thứ gì bạn gọi nó không quan tâm chính xác làm thế nào nó có được bản đồ, chỉ cần nó có được cái mà nó yêu cầu. Sau đó, bạn có thể quay lại và sử dụng XmlSerializer hoặc Trung cấp. (bất cứ điều gì bạn thích) Tất cả những gì bạn phải làm để thực hiện các tuần tự hóa khác đó là tạo ra một triển khai trừu tượng hóa khác (một giao diện hoặc lớp trừu tượng).

Tôi nghĩ rằng có một ví dụ về cách xây dựng nội dung trong thời gian chạy trên trang web câu lạc bộ của người tạo XNA. Nó có thể không được xây dựng với khung mới nhất mặc dù. Bằng cách đó bạn có thể giữ mã cũ nếu bạn đã sử dụng đường ống nội dung. Đây là liên kết: Winform Series 2: Đang tải nội dung


Tôi cảm thấy hơi ngớ ngẩn khi hỏi điều này, nhưng bạn có thể mô tả những gì bạn hình dung về quy trình làm việc bằng cách sử dụng khung này không? Nghe có vẻ rất gọn gàng, nhưng tôi không biết làm thế nào để tiếp cận nó.
Christopher Horenstein

1
Vâng, bạn xác định tuần tự hóa trong trình soạn thảo kiên trì của họ. (thực sự dễ dàng, bạn chỉ cần nhập cụm đối tượng của mình và kiểm tra một số hộp trên cấu trúc / lớp và các trường / thuộc tính bạn muốn duy trì) Sau khi thực hiện xong, bạn có thể khởi tạo một không gian đối tượng sẽ tuần tự hóa / giải tuần tự . Nó khá gọn gàng và nhanh chóng để đứng dậy và chạy.
Michael Coleman

1
Bạn cũng có thể xem dự án này trên codeplex để biết ví dụ tốt hơn về cách xây dựng nội dung bên ngoài phòng thu trực quan. ( xnadevru.codeplex.com/ ))
Michael Coleman
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.