继续提问,我现在就是遇到一个问题,我自己有一套UI, 代码借鉴的是halflife2中的代码,它里面的基础类是Panel,然后通过消息分发,现在我的UI 中,我已 『More』
先说一句,回复最好回在下面,而不要新开贴。这样上下文的线索丢掉了。
在不理解 lua 时最好不要去做封装。我的书上的例子现在看起来是个反例,当时我不太了解 lua ,至少我那个时候没有好好读 lua 的 source code 。
我们应该按符合 lua 特点的手法去做,而不是只图用起来方便。如果想用起来方便,还不如用 python 。 lua 是高效,但是那也要看用的人,怎么用。
以前看过 luaplus ,同事用过,我也跟着用过段时间。但是现在不用,我觉得 lua 提供的 api 已经够好用了。
state->GetGlobal(metaname.c_str()) 这样在 lua 和 c 之间传递字符串是很低效的,有没有更好的方案?可以读一下这个,http://blog.codingnow.com/2006/01/_lua.html 不过这里我用的方法是记住 ref ,这也不是很好的方案。现在我用的方案通常不用 ref 了。而是在 lua 里记忆在 closure 中。可以通过返回一个 closure 来操作一些内部变量。
我们了解 lua 到底怎么工作,什么操作有什么样的代价后,就可以最大限度的把工作做到 lua 层次上的底层封装中。
举个例子,关于根据一个变量名创建对象,我不会在每次构造的时候用 C++ 去 push string ,而是一开始把 string 和 creater 函数注册到系统中。lua 的底层封装去找到匹配调用对应的创建函数。 一般我会给类加上一个 property 读写的接口,但是 property 的名字也是在注册类的阶段注册到 lua 的虚拟机中,而不是在 __index , __newindex 里 switch case 。
关于颜色,通常我喜欢直接用 0xff0000 来表示红色,而不是 RGB 。