我不知道怎么说标题,但我们走了。
假设我创建了一个Lua函数来创建一个2D框出现在屏幕上 - 例如:
box = createObject("Box")
我如何创建box
的属性,这些属性随后会改变box
的外观或反应方式?例如,我可能想要
box.PositionX = 0
box.PositionY = 60
我如何在C ++中做到这一点?
答案 0 :(得分:0)
回答直接问题本身,事情很简单:
只需使用标准的metatable-aware add / set-table-index API。
如果我们看看盒子本身应该如何看待,事情会变得有趣:
createObject "Box"
返回Lua表,并且您不需要立即对更改做出反应,那么就不要做任何特别的事情。createObject "Box"
返回一个Lua表,但你需要立即做出反应,那就让它充当一个代理对象,即使用metatable函数强制从不将该元素添加到表本身。重新映射到保存在专用索引或metatable / metatable函数闭包中的另一个索引或另一个表。createObject "Box"
返回用户数据,请执行与2相同的操作,可以在C中保存非lua值,以便更快地访问/提高效率,使用环境表获取所有其他值。