Действительно зависит от того, как вы разработали свой двигатель. Это не просто части библиотек, которые отвечают за разные вещи, такие как рендеринг, звук, вход и т. Д. У вас должен быть кусок, который объединяет их вместе. Основными двумя подходами являются диаграмма сцены или модель компонента. Это модуль, который объединит все это. Получите ввод, передайте его сущности или компоненту, выполните какой-либо скрипт, выполните некоторые действия sfx, примените некоторое преобразование, отправьте преобразованный объект в конвейер рендеринга. В этом потоке выполнить какой-то скрипт - это то, что вы хотите интегрировать. Есть много способов сделать это. Лучший способ сделать это, если эти сценарии исходят от вашего редактора. Они будут связаны с шаблонами сущностей, экземплярами сущностей, триггерами, элементами пользовательского интерфейса, устройствами ввода. Двигатель не должен знать ничего конкретного об объектах. Их шаблоны должны быть определены в редакторе и снова помещены в мир с помощью редактора.
Редактировать: Дополнительная информация.
Предполагая, что вы полностью хотите пропустить часть приложения, и все, что связано с игрой, написано в вашем редакторе. Затем ваш двигатель должен иметь основной цикл и обновлять и рисовать вашу сцену. Простым началом является «Обновление», а затем «Нарисуйте» свою сцену так быстро, как вы можете, не дожидаясь своего цикла.
Теперь предположим, что у вас есть компонентная модель ... Каждый компонент будет иметь свое обновление, а это обновление - это код, который вы используете. Вы должны создать некоторые интерфейсы, которые ваши компоненты могут получить от движка. Например, ваш шаблон компонента рисования будет иметь модель свойств и в его обновлении вызовет DrawModel на движке и передаст эту модель. Некоторый другой компонент геймпада потребуется от его обновления, чтобы запросить, какие кнопки были нажаты или выпущены. Также потребуется некоторое, чтобы иметь возможность находить другие компоненты в объекте, чтобы он мог изменять положение или скорость физического компонента.
Вы должны начать писать основные компоненты основной сущности, и вы поймете, к чему у вас нет доступа к вашим скриптам. И тогда вы должны разоблачить его на свой скриптовый слой. Но подумайте дважды, прежде чем разоблачать каждую функцию. Чем проще API, тем лучше.
Edit: Как скомпилировать скрипт во время выполнения
IronPython можно оценить код без компиляции, если у вас есть реализация .NET на JavaScript я держал пари, что тоже может это делать. Вот способ C# для компиляции вашего скрипта ... Если ваш редактор находится на C#, я предлагаю вам скомпилировать отдельные сборки в вашем редакторе.
private Assembly Compile(string fileName)
{
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
cp.TreatWarningsAsErrors = false;
CompilerResults cr = provider.CompileAssemblyFromFile(cp, fileName);
return cr.CompiledAssembly;
}
зависит слишком много от типа игр - некоторые из них могут быть включены в основном цикле, но ролевые игры могут понадобиться полными на правила двигателей ... –
Предположат, это на 2-е платформы.Кстати, у меня нет никаких проблем с событиями. Основной цикл может запускать событие 'Step' или каждый кадр, например. Нет проблем с этим вообще. – MahanGM
Определяет ли ваш пользователь логику игры с 'C#'? – Tigran