【问题标题】:Lua on boolean change event?Lua关于布尔更改事件?
【发布时间】:2015-07-10 09:47:20
【问题描述】:

所以我在集思广益关于编程,基本上是 lua 中的逻辑模拟器。我必须彻底检查整个系统,但我认为基于事件的操作可能比不断更新的操作更好。

我有类似的东西:

local var1 = false
local var2 = false
while true do
  if key == "a" then
    var1 = not var1
  end
  if key == "s" then var2 = not var2 end
  var2 = var1
end

但我想要这样的东西:

local var1 = false
local var2 = false
while true do
  if key == "a" then
    var1 = not var1
  end
  if key == "s" then var2 = not var2 end
  if on.change(var1) then
    var2 = var1
  end
end

所以是的,我希望 var2 是独立的,我不希望它一直将自己设置为 var1,我只希望 var2 对 var1 做出反应,如果 var1 发生了变化。

如果我们看第一个代码块,你会发现我无法真正独立控制 var2,它总是将自己设置为 var1,它可能会在很短的时间内将自己设置为 var1。

如果我们查看第二个代码块,您可以看到我可以独立于 var1 控制 var2,并且它仍然对 var1 做出反应。

现在最类似的事情是做这样的事情:

local var1 = false
local var2 = false
while true do
  if key == "a" then
    var1 = not var1
    var2 = var1
  end
  if key == "s" then
    var2 = not var2
  end
end

但我担心这真的不可能实现,而且它会减慢它,因为有很多循环在进行,添加更多的嵌套循环真的会减慢它......

所以请在第二个代码块上发布与事件类似的内容,我已经发布了类似的内容,但它很难实现,并且会有严重的副作用,比如我的嵌套循环正在做。

感谢您的宝贵时间!

【问题讨论】:

  • 以及它难以实现的原因,因为它必须查看另一个变量,并且它应该在没有按键的情况下工作。

标签: events lua boolean onchange


【解决方案1】:

你可以用元表(伪代码)做类似的事情:

local mt = { __index = function(i,v)
    if i == "var1" then 
        var1 = v
        var2 = v
    end
end }

_G.setmetatable(mt)

但我建议您在谷歌上搜索一些可以自动执行此操作的库。

【讨论】:

  • 我还没有找到任何库,我已经搜索了 lua 事件处理程序或 lua 事件,甚至 lua on change 事件。我会试着理解这段代码,下划线让它变得更难......
  • @EEVV 实际上有两个下划线表示元表 __index 字段。 (还有一个在全局上下文值 _G)回到你的 Lua 书。
  • 不,我是自学 lua,我只是弄乱了代码。我听说下划线意味着它是私有的。但话又说回来,本地和私人似乎如此相似。我宁愿它是 java 或 c 之类的,你可以在其中编写访问私有、本地、全局等。
  • @EEVV 然后停止自学并阅读在 Lua 中编程。你听到的都是错的。
猜你喜欢
  • 1970-01-01
  • 2014-03-28
  • 2014-01-06
  • 2018-06-30
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多