Được rồi, công thức theo cách này tôi chắc chắn nó nghe có vẻ mơ hồ, nhưng tôi sẽ làm hết sức để mô tả vấn đề của mình.
Đầu tiên, hãy để tôi giải thích những gì sai với mã nguồn thực sự của tôi.
Tôi đang tạo một nền tảng và đây là các thành phần hiện tại của trò chơi của tôi: Cấp độ , đang giữ lưới ô vuông của riêng mình, cũng như các ô xếp và Ngói , chỉ giữ tên của ô và chỉ mục của nó trong tấm ngói. Tất cả những thứ này đều nằm trong một dự án trò chơi XNA riêng, có tên là GameLib.
Đây là cách các cấp độ của tôi được định dạng trong một tệp văn bản:
x x . . . . .
. . . b g r .
. . . . . . .
X X X X X X X
Trường hợp .
đại diện cho một ô trống,b
đại diện cho một nền tảng màu xanh, X
đại diện cho một khối với một màu ngẫu nhiên, vv
Thay vì thực hiện tất cả công việc tải một cấp trong Cấp độ lớp , tôi quyết định tận dụng tiện ích mở rộng đường ống nội dung và tạo LevelContentPipelineExtension.
Ngay khi tôi bắt đầu, tôi nhanh chóng nhận ra rằng tôi không muốn mã hóa hơn 20 dòng loại này:
if (symbol == 'b')
return new Tile(/*...*/);
Vì vậy, với hy vọng ít nhất là tập trung tất cả việc tạo nội dung vào một lớp, tôi đã tạo một lớp tĩnh, được gọi là LevelContentCreation , chứa thông tin về biểu tượng nào tạo ra cái gì và tất cả các loại công cụ này. Nó cũng giữ một danh sách tất cả các đường dẫn tài sản của các ô xếp, để tải chúng sau này. Lớp này nằm trong dự án thư viện trò chơi GameLib của tôi.
Vấn đề là, tôi đang sử dụng lớp tĩnh LevelContentCreation này trong cả lớp Cấp độ của tôi (để tải các trang tính thực tế) và phần mở rộng đường ống nội dung của tôi (để biết biểu tượng nào đại diện cho ô nào) ...
Và đây là lớp LevelContentCreation của tôi trông như thế nào:
public static class LevelContentCreation
{
private static Dictionary<char, TileCreationInfo> AvailableTiles =
CreateAvailableTiles();
private static List<string> AvailableTileSheets { get; set; }
/* ... rest of the class */
}
Bây giờ, vì lớp LevelContentCreation là một phần của thư viện trò chơi, phần mở rộng đường ống nội dung cố gắng sử dụng nó nhưng cuộc gọi đến CreatAv AvailableTiles () không bao giờ xảy ra và tôi không thể tải đối tượng Cấp độ từ đường ống nội dung.
Tôi biết điều này là do đường ống nội dung thực thi trước khi biên dịch thực tế hoặc một cái gì đó tương tự, nhưng làm thế nào tôi có thể khắc phục vấn đề?
Tôi thực sự không thể di chuyển lớp LevelContentCreation sang phần mở rộng đường ống, bởi vì sau đó là Cấp độ lớp sẽ không thể sử dụng nó ... Tôi khá lạc lõng và tôi không biết phải làm gì ... Tôi biết những điều này là những quyết định thiết kế khá tệ và tôi muốn nó nếu ai đó có thể chỉ cho tôi đi đúng hướng.
Cảm ơn bạn đã dành thời gian quý báu của bạn.
Nếu bất cứ điều gì không đủ rõ ràng hoặc nếu tôi nên cung cấp thêm thông tin / mã, xin vui lòng để lại nhận xét bên dưới.
Một chút thông tin về các dự án của tôi:
- Trò chơi - Dự án trò chơi XNA Windows. Chứa các tham chiếu đến: Engine, GameLib và GameContent
- GameLib - Dự án thư viện game XNA. Chứa các tham chiếu đến: Engine
- GameContent - Dự án nội dung XNA. Chứa các tham chiếu đến: LevelContentPipelineExtension
- Engine - Dự án thư viện game XNA. Không có tài liệu tham khảo.
- LevelContentPipelineExtension - Mở rộng đường ống nội dung XNA. Chứa các tham chiếu đến: Engine và GameLib
Tôi không biết gì về XNA 4.0 và tôi hơi lạc lõng về cách thức hoạt động của nội dung bây giờ. Nếu bạn cần thêm thông tin, cho tôi biết.