Требовать файлы Lua из записываемого пути

В настоящее время я застрял с этой проблемой около 3 дней.

Я использую для игры сценарий cocos2d-x 2.1.3 и Lua. Используя AssetsManager в качестве основы, я успешно получил .zip файлы с сервера и загрузил их в приложение. Однако есть небольшая загвоздка.

В моем проекте (который основан на AssetsManagerTest) он загружает файл .zip (называемый package.zip, содержащий два файла: .png (называется HelloWorld.png) и файл .lua (называется game.lua). Файл .lua просто создает сцену HelloWorld, просто для проверки если это сработает, так оно и есть.

Затем я отредактировал файл game.lua, потребовав еще один .lua файл с именем gem.lua. Когда я пытаюсь запустить его, он сообщает об ошибке, что не может найти gem.lua. Поэтому я попытался отредактировать свой C++ код, чтобы использовать CCLuaEngine::addSearchPath( const char * ), но он по-прежнему не работает.

Я скачиваю папку package.zip и распаковываю ее по пути, возвращенному CCFileUtils::getWritablePath(). Файлы извлечены правильно, и game.lua найден. Когда я попытался добавить gem.lua в пакет, я добавил этот фрагмент кода:

// Obtain the full script path. The value returned is:
//     CCFileUtils::getWritablePath() + "/games/game/scripts"
const std::string scriptPath = MyAssetManager::sharedManager() -> getScriptPath();

// Obtain the script file path
std::string gamePath = scriptPath + "/game.lua";

// Add the scriptPath to the LuaEngine search paths
CCLuaEngine::defaultEngine() -> addSearchPath( scriptPath.c_str() );

// Run the script
CCLuaEnging::defaultEngine() -> executeScriptFile( gamePath.c_str() );

Несмотря на то, что gem.lua находится на правильном пути (/games/game/scripts/), движок каким-то образом не может его найти. Осмотревшись, оказывается, что основной путь для путей поиска - это папка Resource.

Есть ли способ заставить CCLuaEngine искать доступный для записи путь? Однако это можно сделать с помощью ресурсов.

Это все сообщение об ошибке, которое я получаю:

[LUA ERROR] ...D35-DB7A1B515ED3/Documents/games/game/scripts/game.lua:3: module 'gem.lua' not found:
    no field package.preload['gem.lua']gem.lua
    no file './gem/lua.lua'
    no file '/usr/local/share/luajit-2.0.1/gem/lua.lua'
    no file '/usr/local/share/lua/5.1/gem/lua.lua'
    no file '/usr/local/share/lua/5.1/gem/lua/init.lua'
    no file 'Scripts/gem/lua.lua'
    no file 'Scripts/Common/gem/lua.lua'
    no file 'Scripts/HomeScene/gem/lua.lua'
    no file 'Scripts/Games/gem/lua.lua'
    no file '/Users/xxxx/Library/Application Support/iPhone Simulator/6.1/Applications/E0CFD097-5DED-4E6D-8D35-DB7A1B515ED3/Documents/games/game/scripts/gem/lua.lua'
    no file './gem/lua.so'
    no file '/usr/local/lib/lua/5.1/gem/lua.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'
    no file './gem.so'
    no file '/usr/local/lib/lua/5.1/gem.so'
    no file '/usr/local/lib/lua/5.1/loadall.so'

person alxcyl    schedule 13.06.2013    source источник
comment
Какое сообщение об ошибке вы получаете? (Тот, который говорит, что не может найти gem.lua)   -  person catwell    schedule 13.06.2013
comment
Отредактировал вопрос и добавил сообщение об ошибке. Спасибо.   -  person alxcyl    schedule 14.06.2013


Ответы (1)


Учитывая сообщение об ошибке, вы, вероятно, написали в своем коде что-то вроде require "gem.lua". Вам следует удалить расширение: require "gem".

person catwell    schedule 14.06.2013
comment
Это исправило ошибку, указанную выше, но cocos2d-x все еще не смог ее найти. Я решил это, добавив папку скриптов в пути поиска ресурсов, а не пути поиска lua. Спасибо! - person alxcyl; 17.06.2013