Разные пути для сценария и приложения lua - PullRequest
1 голос
/ 22 марта 2010

Моя проблема в том, что у меня проблемы с указанием путей для поиска Lua.

Например, в моем скрипте у меня есть строка require("someScript"), которая отлично работает (она может использовать функции из someScript, когда скрипт выполняется автономно.

Однако, когда я запускаю свое приложение, скрипт завершается ошибкой. Я полагаю, что это потому, что Lua ищет расположение относительно приложения, а не относительно сценария.

Жесткое кодирование всего пути к диску не вариант, так как люди могут скачать игру где угодно, поэтому самое большое, что я могу сделать - это корневая папка для игры.

У нас есть файлы XML для загрузки информации об объектах. В них, когда мы указываем скрипт, который использует объект, нам нужно сделать что-то вроде Content/Core/Scripts/someScript.lua, где Content находится в том же каталоге, что и Debug, а приложение находится внутри Debug. Если я пытаюсь поместить это (Content/Core...) в пакет Lua package.path, я получаю ошибки при попытке запустить автономный скрипт.

Я действительно застрял и не уверен, как это решить. Любая помощь приветствуется. Благодаря.

P.S. Когда я распечатываю файл package.path по умолчанию в приложении, я вижу синтаксис вроде ;.\?.lua в такой последовательности, как ...

;.\?.lua;c:...(long file path)\Debug\?.lua; Я предполагаю, что ; означает конец пути, но я понятия не имею, что означает .\?.lua. Любой файл Lua в каталоге?

1 Ответ

2 голосов
/ 22 марта 2010

Вы можете настроить способ загрузки модулей require, поместив свой собственный загрузчик в таблицу package.loaders. Смотрите здесь:

http://www.lua.org/manual/5.1/manual.html#pdf-package.loaders

Если вы хотите быть уверенным, что все хорошо помещено в «песочницу», вы, вероятно, захотите удалить все загрузчики по умолчанию и заменить их на тот, который делает именно то, что вы хотите, и больше ничего. (Вероятно, он будет чем-то похож на один из существующих, поэтому вы можете использовать их в качестве руководства.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...