首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中如何执行LUA 的整篇代码不是一个函数

2013-11-21 
C++中怎么执行LUA 的整篇代码不是一个函数local function createLayer()local layer CCLayer:create()l

C++中怎么执行LUA 的整篇代码不是一个函数


local function createLayer()  
    local layer = CCLayer:create();  
      
    local sprite = CCSprite:create("bg.png");   
    sprite:setPosition(200, 200);  
    return layer;  
end  
  
local scene = CCScene:create();  
scene:addChild(createLayer());  
CCDirector:sharedDirector():replaceScene(scene);  


用cocos2d-x开发 想执行这一段lua代码 要怎么在C++中写啊?
[解决办法]
看我博客,里面有写!lua与C/C++嵌套使用
[解决办法]
BOOL LuaInit( char * pScriptFile )
{
    char szScriptFilePath[ MAX_PATH ];
    BOOL bResult = FALSE;
    __try
    {
        GetCurrPathName( szScriptFilePath, MAX_PATH );
        strcat_s( szScriptFilePath, MAX_PATH, pScriptFile );

        g_pLua = luaL_newstate();

        if( g_pLua == NULL )
            __leave;

        if( ! RegisterLuaAPI())
            __leave;
        
        if( luaL_loadfile( g_pLua, szScriptFilePath ) != 0 )
        {
            if( MessageBox( NULL, "配置文件中存在语法错误,无法加载,要查看详细信息吗?", "错了", MB_YESNO ) == IDYES )
                MessageBox( NULL, lua_tostring( g_pLua, -1 ), "存在下列语法错误", MB_OK 
[解决办法]
 MB_ICONINFORMATION );
            __leave;
        }

        if( lua_pcall( g_pLua, 0, LUA_MULTRET, 0 ) != 0 )
        {
            if( MessageBox( NULL, "配置文件中存在语法错误,无法编译,要查看详细信息吗?", "错了", MB_YESNO ) == IDYES )
                MessageBox( NULL, lua_tostring( g_pLua, -1 ), "存在下列语法错误", MB_OK 
[解决办法]
 MB_ICONINFORMATION );
            lua_pop( g_pLua, 1 );
            __leave;
        }
        bResult = TRUE;
    }
    __finally
    {
        if( ! bResult )
        {
            if( g_pLua != NULL )
            {
                lua_close( g_pLua );
                g_pLua = NULL;
            }
        }
    }
    return bResult;
}

some_function( ..... )
{
    lua_getglobal( g_pLua, "createLayer" );
    if( ! lua_isfunction( g_pLua, -1 ))
    {
        MessageBox( NULL, "脚本中不存在createLayer函数", "有问题", MB_OK 
[解决办法]
 MB_ICONERROR );
        lua_pop( g_pLua, 1 );
    }
    else
    {
        if( lua_pcall( g_pLua, 0, 1, 0 ) != 0 )
        {


            if( MessageBox( NULL, "调用createLayer发生错误,是否查看详细信息?", "错了", MB_YESNO ) == IDYES )
                MessageBox( NULL, lua_tostring( g_pLua, -1 ),"以下是错误信息", MB_OK 
[解决办法]
 MB_ICONINFORMATION );
            lua_pop( g_pLua, 1 );
            __leave;
        }
        else
        {
            // now , your result in lua stack..
            // do somthing if you want
        }
    }

热点排行