Ракетка как скриптовый язык в игровом движке

Я хотел бы добавить возможности сценариев для моего игрового движка C ++.

я имею Engine.exe, Physics.dll, Audio.dll и я добавляю Scripting.dll который является оберткой для ракеток высокого уровня.

Engine.exe грузы Physics.dll и настраивает физику мира, загружает Audio.dll и настраивает аудио мир. Предполагается загрузить Scripting.dll, чтобы установить привязки к Physics.dll, Audio.dll и загрузить игровые скрипты.

AFAIK Есть два возможных способа встраивания Racket в программу C ++:

С помощью Внешний интерфейс кажется странным из-за необходимости загрузки Physics.dll, Audio.dll два раза: сначала из Engine.exe а потом из игрового скрипта.

Пишу расширения выглядит более привлекательным, потому что позволяет делать привязки скриптов на стороне C ++. С другой стороны, вы должны построить свое расширение с raco ctool, связать это с mzdyn объектный файл — который также выглядит неловко: почему бы не сделать mzdyn статическая библиотека?

Я хотел бы реализовать один метод, например, setupScriptBindings(), оба в Physics.dll И в Audio.dllи позвонить из Engine.exe при запуске.

Есть ли простой способ сделать это?

6

Решение

Используя методы расширения и FFI для соединения Racket с кодом C, я должен сказать, что подход FFI много лучше. Привязки в Racket к функциям C хорошо определены и надежны, а иметь дело с типами C в Racket очень приятно. Единственным недостатком использования подхода FFI является то, что, AFAIK, ваша программа Racket должна быть приложением драйвера.

С подходом встраивания ваш исполняемый файл C / C ++ является драйвером, но объявление интерфейса с кодом Racket намного более ручное и подвержено ошибкам. Не говоря уже о том, что вы должны либо выяснить raco ctool и скопировать его, либо взять систему сборки ракетки на себя. Для наших целей мы извлекли источники Ракетки и создали его сами. Я не очень рекомендую такой подход.

В конечном счете, для моих целей мое приложение должно быть приложением Racket с чужим файлом .DLL / .so, которое оно загружало для функций C, работало лучше всего, но, похоже, вы застряли с подходом встраивания.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]