1, Q:为什么没有用Luaplus或是其他的Binder?

    A: nice question! Luaplus不能满足我在linux下使用,其他的太庞大,我需要一个轻量级的。


2,Q:是原创吗?

   A:NO, thanks to Matthew Harmon matt@matthewharmon.com,我按照自己的需求做了封装。


3,Q:它的优点是什么?

   A:主要是它简单,基本能满足和C/C++交互的需求。它使用了lua_newthread来管理每一个脚本(性能有问题吗?)。它支持

       事件的resume,另外把LuaDebugger也封装进来了,方便调试。


 贴下接口头文件:

封装LuaEngine_字符串#ifndef    ILUAENGINE_H

封装LuaEngine_字符串 #define     ILUAENGINE_H

封装LuaEngine_字符串

封装LuaEngine_字符串 #define  GTC_LP        0x0000     //  指针

封装LuaEngine_字符串 #define  GTC_INT        0x0001     //  整型

封装LuaEngine_字符串 #define  GTC_DOUBLE    0x0002     //  浮点型

封装LuaEngine_字符串 #define  GTC_STRING    0x0003     //  字符串

封装LuaEngine_字符串

封装LuaEngine_字符串 //  脚本数据类型定义

封装LuaEngine_字符串 enum

封装LuaEngine_#define_11封装LuaEngine_封装_12封装LuaEngine_c++_13 {

封装LuaEngine_lua_14    SD_NUMBER = 0,    // 数字类型

封装LuaEngine_lua_14    SD_STRING,        // 字符串类型

封装LuaEngine_lua_14    SD_TABLE,        //表

封装LuaEngine_lua_17} ;

封装LuaEngine_字符串

封装LuaEngine_字符串 struct  SSDTable

封装LuaEngine_#define_11封装LuaEngine_封装_12封装LuaEngine_c++_13 {

封装LuaEngine_lua_14    int nNum;

封装LuaEngine_lua_14    void* pValue;

封装LuaEngine_lua_17} ;

封装LuaEngine_字符串

封装LuaEngine_字符串 //  脚本参数对象

封装LuaEngine_字符串 struct  SScriptParamObj

封装LuaEngine_#define_11封装LuaEngine_封装_12封装LuaEngine_c++_13 {

封装LuaEngine_lua_14    int nType;            // 参数类型, SD_NUMBER 或者 SD_STRING

封装LuaEngine_lua_14

封装LuaEngine_lua_14    union UScriptParam    // 参数值

封装LuaEngine_c++_35封装LuaEngine_c++_36    封装LuaEngine_c++_13{

封装LuaEngine_lua_14        int        nNumber;        // 数字

封装LuaEngine_lua_14        char    szString[64];    // 字符串

封装LuaEngine_lua_14        SSDTable stTable;

封装LuaEngine_lua_14

封装LuaEngine_封装_42    } unValue;

封装LuaEngine_lua_14

封装LuaEngine_lua_14    SScriptParamObj()

封装LuaEngine_c++_35封装LuaEngine_c++_36    封装LuaEngine_c++_13{

封装LuaEngine_lua_14        memset(this, 0, sizeof(*this));

封装LuaEngine_封装_42    }

封装LuaEngine_lua_14

封装LuaEngine_lua_14    void operator = (int nValue)

封装LuaEngine_c++_35封装LuaEngine_c++_36    封装LuaEngine_c++_13{

封装LuaEngine_lua_14        nType = SD_NUMBER;

封装LuaEngine_lua_14        unValue.nNumber = nValue;

封装LuaEngine_封装_42    }

封装LuaEngine_lua_14

封装LuaEngine_lua_14    void operator = (char *str)

封装LuaEngine_c++_35封装LuaEngine_c++_36    封装LuaEngine_c++_13{

封装LuaEngine_lua_14        nType = SD_STRING;

封装LuaEngine_lua_14        unValue.szString[0] = 0;

封装LuaEngine_lua_14

封装LuaEngine_lua_14        if (str != NULL)

封装LuaEngine_c++_35封装LuaEngine_c++_36        封装LuaEngine_c++_13{

封装LuaEngine_lua_14            strncpy(unValue.szString, str, sizeof(unValue.szString));

封装LuaEngine_封装_42        }

封装LuaEngine_封装_42    }

封装LuaEngine_lua_14

封装LuaEngine_lua_14    void operator = ( SSDTable pT )

封装LuaEngine_c++_35封装LuaEngine_c++_36    封装LuaEngine_c++_13{

封装LuaEngine_lua_14        nType = SD_TABLE;

封装LuaEngine_lua_14        unValue.stTable.nNum = pT.nNum;

封装LuaEngine_lua_14        unValue.stTable.pValue = (void *)pT.pValue;    

封装LuaEngine_封装_42    }

封装LuaEngine_lua_14

封装LuaEngine_lua_17} ;

封装LuaEngine_字符串

封装LuaEngine_字符串 struct  ILuaScript

封装LuaEngine_#define_11封装LuaEngine_封装_12封装LuaEngine_c++_13 {    

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: szFileName - 脚本文件名

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: 调用一个脚本

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual bool CallFile(const char *szFileName) = 0;

封装LuaEngine_lua_14    

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: szFuncName - 函数名 pIn, nInNum - 输入参数列表指针以及个数

封装LuaEngine_lua_14     *    @Return: pRet, nRetNum - 返回参数列表指针以及个数

封装LuaEngine_lua_14     *    @Description: 调用一个函数

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual bool CallFunction(const char *szFuncName, SScriptParamObj *pIn, 

封装LuaEngine_lua_14                        int nInNum,    SScriptParamObj *pRet, int nRetNum) = 0;

封装LuaEngine_lua_14    

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: szString - 字符串指针

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: 调用一个字符串

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual bool CallString(const char *szString) = 0;

封装LuaEngine_lua_14

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: NULL

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual void ShowLuaCallStack() = 0;    

封装LuaEngine_lua_17} ;

封装LuaEngine_字符串

封装LuaEngine_字符串 struct  ILuaManager

封装LuaEngine_#define_11封装LuaEngine_封装_12封装LuaEngine_c++_13 {

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: NULL

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual bool InitManager(IGameWorld* pGameWorld) = 0;

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: NULL

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual ILuaScript* CreateScript() = 0;

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: NULL

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual void Update(float fElapse) = 0;

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: 注意如果是自己卸载一个script,请自己

封装LuaEngine_lua_14                      手工管理这个script的指针,manager析构

封装LuaEngine_lua_14                      的时候,会自动析构所有的script

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual void UnlinkScript(ILuaScript* pScript) = 0;

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: NULL

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual ILuaScript* GetScript(const char* szScriptName) = 0;

封装LuaEngine_c++_35封装LuaEngine_c++_36    /**//*

封装LuaEngine_lua_14     *    @Param: NULL

封装LuaEngine_lua_14     *    @Return: NULL

封装LuaEngine_lua_14     *    @Description: NULL

封装LuaEngine_封装_42     */

封装LuaEngine_lua_14    virtual void Release() = 0;

封装LuaEngine_lua_17} ;

封装LuaEngine_字符串 #endif