【问题标题】:Lua script not recognizing self.idLua 脚本无法识别 self.id
【发布时间】:2023-03-15 10:40:01
【问题描述】:

我正在修改现有程序以实现新工具栏。该程序使用 Lua 脚本来处理 Flash 动画和命令的显示和处理。我可以调出 Flash 动画窗口,但是添加命令侦听器的行失败了。

HUD.AddFSCommandListener(self.file_SWF, self.id)

错误是:“参数类型错误。函数 HUD.AddFSCommandListener(movie, entityId) 需要指针类型的参数 2(提供的类型为 Null)”。

我已经在系统中翻来覆去、下层和周围,但我无法弄清楚我做错了什么,尽管我怀疑有某种注册步骤我做错了。我正在开发的游戏使用了 CryEngine,我发现并没有很多人对此提出问题。但是,如果这个错误在另一个系统中有某种类似的东西,那么也许这可能会激发我对我需要做什么的想法。

谢谢。

【问题讨论】:

  • 这里有一个链接create.bluemars.com/wiki/index.php/HUD,看起来第一个参数应该是self.Hud.file_SWF?
  • 访问 SWF 文件不是问题。问题在于第二个参数。 Lua 表中最初不包含“id”值,但对于程序中的所有 Lua 脚本都是如此。在初始化过程中的某个时刻,为每个 Lua 表(实体)分配一个 id 编号/值。我仍在尝试追查发生这种情况的位置,但到目前为止还没有成功。
  • 听起来 Lua 实体没有正确创建,或者由于某种原因它已被垃圾收集。根据这个(crydev.net/wiki/index.php/Lua_API/Entity),每个 Lua 实体都有一个唯一标识符,该标识符是通过 SpawnEntity() 函数分配的。

标签: lua cryengine


【解决方案1】:

你的问题很可能是你实际需要做的

HUD:AddFSCommandListener(self.file_SWF, self.id)

问题不在于它无法识别 self.id,而是当您使用点表示法调用时,如果该函数本来是一个表函数,那么您传递的第一个参数将成为函数的“self”参数。所以它要寻找的第二个参数实际上是 nil。

冒号函数符号是用于隐式传递 self 变量的语法糖,其中 self 成为表(在本例中为 HUD)。因此,大多数 lua 接口将从 second 参数开始计数。所以它所说的第二个实际上是第三个。

例子:

HUD = {}

function HUD:AddFSCommandListener(file, id)

end

实际上等价于:

HUD = {}

HUD.AddFSCommandListener = function( self, file, id )

end

因此,当您使用点而不是冒号调用时,您会将 file_swf 推入它最可能期望的 self 参数中。

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2020-03-14
    • 1970-01-01
    • 2017-08-15
    • 2020-12-02
    相关资源
    最近更新 更多