Có thể sử dụng lại cùng một cửa sổ trong nhiều trò chơi không?


7

Cụ thể, tôi đang nghĩ về C # và XNA, và rõ ràng là trên Windows. Giả sử tôi có trò chơi chính là trò chơi XNA bình thường, nhưng đến một lúc nào đó tôi muốn chuyển sang một trò chơi nhỏ cũng được triển khai trong XNA nhưng hoàn toàn độc lập với trò chơi của tôi.

Có cách nào tôi có thể chuyển sang và quay lại giữa hai trò chơi, trong khi sử dụng lại cùng một cửa sổ không? Và tốt nhất là giữ trạng thái cũ trong bộ nhớ, mặc dù tôi cũng có thể thực hiện việc ghi kiên trì này vào một tệp.

Và khi quay lại trò chơi ban đầu, có cách nào tôi có thể truy cập vào giá trị được trả về bằng phương thức chính của trò chơi mini không? Chẳng hạn, 1 hoặc 0 tùy thuộc vào việc người chơi có xóa trò chơi mini hay không.


Andrew Russell đã viết:

Bạn nên xây dựng trò chơi nhỏ và trò chơi chính của mình thành các lớp riêng biệt trong cùng một chương trình. Mỗi lớp nên có các phương thức Cập nhật, Vẽ, Khởi tạo, v.v. Sau đó, bạn nên có một số loại trình điều khiển chính để gọi các phương thức đó chỉ có một trò chơi hoạt động tại một thời điểm (điều này cũng có thể đơn giản là trong lớp trò chơi chính của bạn).

Cảm ơn câu trả lời. Gợi ý của bạn là những gì tôi sẽ làm trong một tình huống trò chơi bình thường - một trong đó tôi là người tạo ra tất cả các trò chơi nhỏ và nội dung của chúng.

Nhưng đây không phải là một trò chơi, mà là một công cụ của nhà sản xuất trò chơi để tạo ra các cuộc phiêu lưu đồ họa và người dùng cuối có thể cảm thấy cần phải cắm các trò chơi nhỏ bên ngoài để đáp ứng với các sự kiện trò chơi nhất định.

Công cụ nội bộ cũ hơn mà tôi đang cố gắng thay thế đã được thực hiện trong Flash và đã giải quyết vấn đề này chỉ bằng cách tải SWF bên trong SWF chính. Nó hoạt động tốt cho hầu hết các trường hợp. Tôi đang cố gắng làm điều gì đó tương tự nhưng với XNA bây giờ.

Nhưng theo con tàu hoặc suy nghĩ của bạn, có lẽ tôi có thể tạo ra một hội đồng riêng có chứa một lớp cơ sở hoặc giao diện chung cho tất cả các trò chơi nhỏ và biên dịch nó dưới dạng dll. Sau đó, người dùng sẽ tham chiếu thư viện đó, thực hiện giao diện và biên dịch vào thư viện của riêng mình có thể được tải bởi công cụ khi chạy và thực thi như một trạng thái riêng biệt trong trò chơi chính. Tôi có thiếu một số ẩn ý?


Có lẽ một cái gì đó giống như một triển khai hệ thống cảnh có thể làm việc?
Gustavo Maciel

Tôi đoán nó thực sự phụ thuộc vào việc bạn có quyền truy cập mã cho các trò chơi mini khác hay không. về mặt lý thuyết là có thể. ít nhất tôi đã có một ý tưởng làm thế nào để làm như vậy nếu các minigame được viết bằng mã C / C ++ thuần túy.
Ali1S232

@Gajet Tôi đã thêm một số thông tin về câu hỏi của tôi. Tôi không có quyền truy cập vào mã của các trò chơi nhỏ. Đó là một công cụ tạo trò chơi chạy trên XNA và đó là người dùng công cụ có thể muốn cắm các trò chơi nhỏ của riêng họ.
David Gouveia

Câu trả lời:


6

Không. Không có cách chính thức nào để làm điều này trong API.

Nếu bạn bị điên , có lẽ bạn có thể sử dụng sự phản chiếu để truy cập vào các đối tượng DirectX cơ bản, sau đó lừa họ sử dụng lại một cửa sổ và kích hoạt tải lại nội dung vào đúng thời điểm. (Về cơ bản, chỉ có thể gắn một bối cảnh thiết bị vào một cửa sổ)

Bạn có thể để chúng có cửa sổ riêng biệt. Mặc dù điều đó có thể giới thiệu các vấn đề, đặc biệt là nếu cả hai cần phải ở chế độ toàn màn hình.


Bạn nên xây dựng trò chơi nhỏ và trò chơi chính của mình thành các lớp riêng biệt trong cùng một chương trình. Mỗi lớp nên có các phương thức Cập nhật, Vẽ, Khởi tạo, v.v. Sau đó, bạn nên có một số loại trình điều khiển chính để gọi các phương thức đó chỉ có một trò chơi hoạt động tại một thời điểm (điều này cũng có thể đơn giản là trong lớp trò chơi chính của bạn).

Bạn có thể sử dụng các trình quản lý nội dung riêng biệt cho từng trò chơi / trò chơi nhỏ, cho phép bạn tải nội dung cho từng trò chơi sau khi hoàn thành.

Xem xét nhìn vào mẫu Quản lý nhà nước trò chơi .


Để trả lời chỉnh sửa của bạn:

Đúng. Một loại hệ thống plugin như thế này sẽ hoạt động tốt.

Xin lưu ý rằng, một khi được tải vào một quy trình, bạn sẽ không thể tải DLL plugin mà không tải toàn bộ quá trình - mặc dù bạn có thể dỡ tài nguyên của nó theo cách thông thường. (Lưu ý cho bất kỳ ai khác gặp phải điều này: Bạn có thể hủy tải khi sử dụng AppDomains, nhưng tôi chắc chắn chắc chắn rằng điều này sẽ không chơi tốt với XNA.)


Cảm ơn bạn đã trả lời. Tôi bắt đầu viết bình luận cho câu trả lời của bạn nhưng nó đã trở nên quá lớn nên tôi đã thêm nó vào câu hỏi của mình. Ý kiến ​​của bạn về nó là gì?
David Gouveia

@DavidGouveia Cập nhật để trả lời theo dõi của bạn.
Andrew Russell

Cảm ơn, tôi nghĩ rằng bằng cách nào đó tôi đã xoay sở để hình dung cách thực hiện điều này và câu trả lời rất hữu ích. Tuy nhiên, tôi sẽ đợi một vài ngày trước khi chấp nhận, bởi vì tôi tò mò liệu ai đó sẽ có thể đưa ra một số cách không chính thức và điên rồ để làm cho nó hoạt động mà không có hệ thống plugin.
David Gouveia
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.