【问题标题】:Checking a local in Lua在 Lua 中检查本地
【发布时间】:2021-07-31 23:50:53
【问题描述】:

我对 Lua 以及一般的编码都很陌生。此代码是运行计时器以检查按键的脚本的一部分。我无法让这部分脚本正常工作。第一部分工作正常 - 它打印消息并将本地设置为 1 - 但是尽管在我按 N 时已将本地设置为 1,但它总是返回“没有保存的相机位置可用”消息。我做错了什么?

  local campossaved

--(...other code that doesn't access the local "campossaved"...)

 -- save camera position (hotkey B) --wip
if (isKeyPressed(VK_B)) then
    print("Saved camera position.")
    campossaved = 1
 end


 -- load camera position (hotkey N) --wip
if (isKeyPressed(VK_N)) then
  if (campossaved == 1) then
    print("Loaded camera position.")
    else
      print("No saved camera position available.")
    end
 end

【问题讨论】:

  • 在您发布的代码中,campossaved 是一个全局变量。如果你把它做成本地的,你也需要向我们展示这段代码。
  • @JosephSible-ReinstateMonica 已编辑 :)

标签: lua


【解决方案1】:

你说它在计时器循环中运行。我猜这是一个范围问题,并且每次运行该计时器循环时,campossaved 都会重新初始化为nil,因此按 B 只会将其设置为 1/60 秒,或者您的游戏循环运行速度有多快。您需要确保在调用计时器之前创建 local campossaved 前向声明

local campossaved

--function timer(delta)

    -- save camera position (hotkey B)
    if isKeyPressed(VK_B) then
        print("Saved camera position.")
        campossaved = true
    end

    -- load camera position (hotkey N)
    if isKeyPressed(VK_N) then
        if campossaved then
            print("Loaded camera position.")
        else
            print("No saved camera position available.")
        end
    end

--end

【讨论】:

  • 这是正确的答案,我在函数内部声明了局部变量,因此它们一直被 nil 覆盖。谢谢!!
【解决方案2】:

发生这种情况的唯一方法是不要输入第一个 if 语句,该语句会将 1 分配给 campossaved

为此,isKeyPressed(VK_N)isKeyPressed(VK_B) 都必须返回 true。所以你可能必须同时按下它们。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2013-12-25
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2014-08-12
    相关资源
    最近更新 更多