为Lua创建属性

时间:2014-04-20 16:23:42

标签: c++ properties lua

我不知道怎么说标题,但我们走了。

假设我创建了一个Lua函数来创建一个2D框出现在屏幕上 - 例如:

box = createObject("Box")

我如何创建box的属性,这些属性随后会改变box的外观或反应方式?例如,我可能想要

box.PositionX = 0
box.PositionY = 60

我如何在C ++中做到这一点?

1 个答案:

答案 0 :(得分:0)

回答直接问题本身,事情很简单:
只需使用标准的metatable-aware add / set-table-index API。

如果我们看看盒子本身应该如何看待,事情会变得有趣:

  1. 如果createObject "Box"返回Lua表,并且您不需要立即对更改做出反应,那么就不要做任何特别的事情。
  2. 如果createObject "Box"返回一个Lua表,但你需要立即做出反应,那就让它充当一个代理对象,即使用metatable函数强制从不将该元素添加到表本身。重新映射到保存在专用索引或metatable / metatable函数闭包中的另一个索引或另一个表。
  3. 如果createObject "Box"返回用户数据,请执行与2相同的操作,可以在C中保存非lua值,以便更快地访问/提高效率,使用环境表获取所有其他值。