为Lua创建属性

Creating properties for Lua

本文关键字:属性 创建 Lua      更新时间:2023-10-16

我不知道如何拼写标题,但我们开始了。

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

box = createObject("Box")

如何为box创建属性,从而更改box的外观或反应?例如,我可能想做

box.PositionX = 0
box.PositionY = 60

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

只要回答直接的问题本身,事情就很简单:
只需使用标准的metatable-aware添加/设置表-索引API。

如果我们看看盒子本身应该是什么样子,事情就会变得有趣:

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