Як я можу зробити колекцію міні-ігор у XNA, де користувач може завантажувати пакети міні-ігор та main .exe, запускати їх, не змінюючи їх?


12

Зараз я роблю комп'ютерну гру в XNA. Це насправді колекція міні-ігор (на даний момент є 3 міні-ігри), проте я планую зробити та додати ще, що можна завантажити в "пакети".

Моє запитання, який найкращий спосіб досягти цього?

Наразі мої думки:

  • Створіть інтерфейс 'гра'
  • Створюйте ігри на цьому інтерфейсі, але створюйте їх у форматі .dlls
  • Нехай основний .exe-файл сканує каталог і завантажується в .dlls під час виконання.

Я не дуже заплутався з цією ідеєю, але знаю, що принаймні є додатки, які використовують цей підхідний модуль (здається, Notepad ++), але я не впевнений у будь-яких іграх, які це роблять (хоча я впевнений вони повинні існувати). Однак здається, що це проблема, яка була вирішена раніше, тому мені цікаво, чи існує якась форма встановленої найкращої практики.

Відповіді:


5

У Windows можна просто відкрити збірку (dll) та імпортувати типи та виконувати методи. Дивіться документацію щодо складання класу .

На Xbox 360 у вас немає доступу до System.Reflection. Тут слід покластися на API магазину XBLA. Я не впевнений, наскільки ця функціональність доступна для програм XBLIG.


Так, я знаю, що я можу просто завантажити .dlls (оскільки це комп'ютерна гра), однак мені цікаво, чи це найкращий спосіб зробити це, чи це суперечить певній усталеній кращій практиці
Ендрю Торп

+1 Це стандартний спосіб завантаження плагінів. Знайдіть архітектуру плагінів; FYI, це дуже вдале рішення.
зола999

1

Оскільки ви будуєте гру для Windows, ви можете отримати доступ до повного фреймворку, як заявив @Ranieri. Ваша архітектура звучить солідно; однак, можливо, ви захочете зайти в MEF , керовану рамку розширення. Це може зробити той робочий процес, який ви окреслите, більш впорядкованим. Я сам цього не використовував, але читав про це хороші речі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.