Đường ống nội dung XNA với tiện ích tạo bản đồ


7

Tôi đã xem xét cách sử dụng đường ống Nội dung XNA một cách thích hợp cho trò chơi tôi đang làm việc. Tuy nhiên, tôi đã có một thời gian khó khăn để quấn đầu xung quanh nó và không chắc chắn về cách tốt nhất để tiến hành.

Ví dụ cụ thể là, tôi có một trò chơi theo phong cách RPG 2 chiều từ trên xuống. Tôi muốn tạo một tiện ích (có thể là Windows Forms) cho phép tôi dễ dàng tạo và chỉnh sửa bản đồ. Mỗi bản đồ bao gồm 1 hoặc nhiều lớp đồ họa, mỗi lớp chứa một lưới gạch N x N. Lần lượt mỗi ô bắt đầu như một bitmap.

Đưa ra các thông tin trên tôi thấy một vài cách để tiến hành:

  1. Lưu trữ thông tin bản đồ trong tệp XML tương thích với trình tải XML Đường ống nội dung. Mỗi ô được lưu trữ dưới dạng tham chiếu chuỗi đến tài sản kết cấu tương ứng. Tài sản kết cấu được thêm vào trong dự án trò chơi.
  2. Lưu trữ thông tin bản đồ trong tệp XML tương thích với trình tải XML Đường ống nội dung. Mỗi ô được lưu trữ dưới dạng đường dẫn đến các tệp .bmp / ​​.png tương ứng.

Bây giờ có những điều mà tôi thực sự không thích về cả hai cách tiếp cận. Vấn đề chính với cách tiếp cận thứ nhất là việc tạo bản đồ và tạo tài sản kết cấu .xnb hoàn toàn tách biệt. Tệp bản đồ .xml được tạo bởi tiện ích, trong khi nội dung kết cấu được thêm vào nội dung của tôi trong trò chơi của tôi. Điều này trở thành một vấn đề khi cố gắng đảm bảo tệp bản đồ .xml và tất cả các tài sản kết cấu trong dự án được đồng bộ hóa.

Cách tiếp cận hai sẽ cho phép tôi giữ tất cả các tệp hình ảnh phù hợp bên cạnh các tệp bản đồ bằng tiện ích bản đồ. Tuy nhiên, có vẻ như tôi không nên làm điều gì đó như thế này. Ngoài ra, tôi sẽ cần phải thông minh hơn trong việc tải bản đồ để không nhanh chóng tải cùng một hình ảnh ra khỏi đĩa cho mỗi ô.

Vì vậy, câu hỏi của tôi là: Nếu bạn muốn thêm tiện ích tạo nội dung (như trình chỉnh sửa bản đồ), cách tốt nhất để đảm bảo rằng nội dung tùy chỉnh (tệp bản đồ) vẫn đồng bộ với nội dung kết cấu. Ngoài ra, hãy nhớ rằng trong trình chỉnh sửa bản đồ của tôi, tôi sẽ cần khả năng tải và hiển thị các tài sản kết cấu.

Bất kỳ đầu vào được nhiều đánh giá cao.

Câu trả lời:


6

Những gì bạn muốn là có được kết cấu của bạn để xây dựng dựa trên nội dung của tệp XML. Bằng cách này, bạn không phải thêm họa tiết vào dự án nội dung của mình, đường ống sẽ tự động đưa tệp kết cấu vào bản dựng cho bạn.

Để làm điều này, bạn sẽ cần phải viết một bộ xử lý nội dung tùy chỉnh (bạn vẫn có thể sử dụng trình nhập XML tiêu chuẩn) và sử dụng ContentProcessorContext.BuildAssettrong bộ xử lý đó để tham chiếu kết cấu bên ngoài.

Tôi nghĩ rằng bạn sẽ cần phải tạo một tùy chỉnh ContentTypeWriterContentTypeReaderviết và sau đó đọc những ExternalReferenceBuildAssetmang lại cho bạn.


Andrew hoàn toàn đúng ở đây!
Roy T.

2

Đặt tất cả các hình ảnh xếp của bạn vào một tệp hình ảnh duy nhất và tham chiếu chúng theo số ô.

Điều này sẽ hiệu quả hơn và không có lỗi, và có lợi thế là bạn có thể thiết lập các cấp độ của mình trong trình chỉnh sửa ô vuông như Tiled .


Không phải điều này chỉ hoạt động hiệu quả hơn đối với các trò chơi cực kỳ nhỏ vì tải quá lớn kết cấu chậm và trên độ phân giải nhất định là không thể
Roy T.

1
@Roy T: Nếu bạn có quá nhiều gạch mà kết cấu đóng gói của bạn "quá lớn", rất có thể bạn cần phải đóng gói chúng thành một hoặc nhiều kết cấu để hiển thị hiệu suất.
Andrew Russell

@Andrew Russel, vâng đó là những gì tôi muốn nói :). Nhưng tôi mới bắt đầu tính toán và một kết cấu 4096x4096 (tối đa trên các videocard cũ) có thể gói 64x64 (còn gọi là 4096) của 64x64, vì vậy có lẽ đó không phải là vấn đề như tôi nghĩ.
Roy T.

1

Tôi không chắc chắn 100% tôi đã hiểu rõ câu hỏi của bạn trong đầu, nhưng hãy thử điều này:

Bạn sẽ phải làm cho trình chỉnh sửa bản đồ dẫn đầu, không thêm bất kỳ tài sản nào vào dự án Nội dung của bạn ngoại trừ một tệp XML (game.xml hoặc một cái gì đó). Bây giờ hãy chỉnh sửa cấp độ của bạn để chỉnh sửa tệp game.xml, bằng cách thêm liên kết đến các tệp khác. Ví dụ: tạo một cấp độ mới trong trình soạn thảo cấp độ của bạn sẽ thêm thẻ <level rank=5>Content/MyLevel/level5.xml/>vào tệp XML của bạn.

Bây giờ để có được mọi thứ được xây dựng, bạn cần phải viết một phần mở rộng đường ống nội dung tùy chỉnh. (Đảm bảo đặt trình nhập và bộ xử lý mới trên tệp game.xml của bạn thay vì bộ xử lý XML mặc định)

Bộ xử lý này sẽ duyệt qua các tệp XML và xây dựng tất cả các tài sản bằng cách gọi các nhà nhập khẩu và bộ xử lý thích hợp. Điều này sẽ để lại cho bạn mọi thứ được xây dựng độc đáo và không phải quay lại dự án nội dung và trình soạn thảo của bạn.

Tài nguyên: http://msdn.microsoft.com/en-us/l Library / bb447754.aspx

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.