Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
给引擎正式加入对lua脚本的支持
其实最便利的办法就是脚本和引擎独立开来,但是这样不便于c++和lua的通信
若是把lua全部都封装进引擎则由于lua和c++是2个不同的语言很难实现
再者封装的一个弊端是封装的越好则越的其灵活性降低
考虑下我把引擎lua上下文设计成了以下的样子:
 1 ////////////////////////////////////////////////////////////
 2 /// 定义引擎Lua脚本上下文
 3 ////////////////////////////////////////////////////////////
 4 class LuaContext : public core::Object
 5 {
 6 public
 7     ///////////////////////////////////////////////////////
 8     /// 构造,析构引擎Lua脚本上下文
 9     ///////////////////////////////////////////////////////
10     LuaContext(){}
11     virtual ~LuaContext(){}
12 public
13 #ifdef LUA_EXT_LUAPLUS    
14     ///////////////////////////////////////////////////////
15     /// 获取luastateowner指针
16     ///////////////////////////////////////////////////////
17     virtual LuaPlus::LuaStateOwner* GetLuaStateOwner() = 0
18 #endif     
19     ///////////////////////////////////////////////////////
20     /// 执行给定lua脚本字符串
21     ///////////////////////////////////////////////////////   
22     virtual int DoStirng(const char* script) = 0;
23     
24     ///////////////////////////////////////////////////////
25     /// 载入给定lua脚本并执行(.lua,.luac)
26     //////////////////////////////////////////////////////
27     virtual int DoFile(const char* luafile) = 0;
28 public:    
29     ///////////////////////////////////////////////////////
30     /// 从lua上下文中获取给定名字的全局整数变量  
31     //////////////////////////////////////////////////////
32     virtual int    GetInteger(const char* var, int def = 0= 0;
33     
34     ///////////////////////////////////////////////////////
35     /// 从lua上下文中获取给定名字的全局浮点数变量  GetDouble()
36     ///////////////////////////////////////////////////////     
37     virtual float  GetFloat(const char* var, float  def = 0.0f= 0;
38     virtual double GetDouble(const char* var, double def = 0.0= 0;    
39     
40     ///////////////////////////////////////////////////////
41     /// 从lua上下文中获取给定名字的全局字符串变量(len为字符串长度)
42     ///////////////////////////////////////////////////////     
43     virtual const char* GetString(const char* var, int &len) = 0;
44     
45     ///////////////////////////////////////////////////////
46     /// 从lua上下文中获取给定名字的全局布尔变量(flag为标记符号)
47     ///////////////////////////////////////////////////////         
48     virtual bool GetBoolean(const char* var, bool &flag) = 0
49     
50     ///////////////////////////////////////////////////////
51     /// 执行lua上下文中的给定函数(该函数既无参数也无返回值)
52     ///////////////////////////////////////////////////////
53     virtual void RunFunction(const char* fn) = 0
54     
55     DECLARE_OBJECT(LuaContext)    
56 };
57 
通过GetLuaStateOnwer获取引擎全局的lua state指针.
当然LuaContext中只是简单封装了一些获取全局变量的函数.
当然这些是最常用的.
随着引擎的开发我再根据情况加入更多可能的函数.
posted on 2010-02-25 17:21 ccsdu2009 阅读(402) 评论(0)  编辑 收藏 引用 所属分类: Game引擎

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理