【问题标题】:Roblox Lua if statement still executing even when the value isn't true即使值不正确,Roblox Lua if 语句仍在执行
【发布时间】:2020-10-23 13:36:59
【问题描述】:

这是我游戏中的一个主要问题。我一直在尝试制作一个脚本来检测值何时为 1、2、3、4 或 5。但是,即使值为 0,if 语句仍将执行,从而使计时器在任何人进入之前启动电梯。这真的很烦人,我无法解决它。这是脚本:

local players = workspace.TestMode.Players
players.Value = 0
wait(5)
script.Parent.Text = "Waiting for players..."

function StartTimer()
  while true do
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      script.Parent.Text = "15"
      print("enough players")
      wait(0.1)
    else
      script.Parent.Text = "Waiting for players..."
      print("not enough players")
    end 
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "14"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "13"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "12"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "11"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "10"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "9"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "8"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "7"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "6"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "5"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "4"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "3"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "2"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "1"
    else
      script.Parent.Text = "Waiting for players..."
    end
    wait(0.1)
    if players.Value == 1 or 2 or 3 or 4 or 5 then
      wait(0.9)
      script.Parent.Text = "Teleporting players..."
    else
      script.Parent.Text = "Waiting for players..."
    end
  end
end
StartTimer()

【问题讨论】:

  • 您错误地使用了“或”。它应该像“如果 player.Value == 1 或 player.Value ==2”一样使用。您应该阅读更多文档,有更好的方法。您也可以查看stackoverflow.com/questions/33510736/…

标签: lua roblox


【解决方案1】:

在 Lua 中,除 nilfalse 之外的所有值都是 truthy,因此在布尔上下文中评估时,它们将被视为 true

if players.Value == 1 or 2 or 3 or 4 or 5 then

这意味着你的 if 条件是 players.Value == 1 true 或者是 2 true 等等。 2 始终是 true。所以你的 if 条件总是true

你的情况应该是这样的:

if players.Value == 1 or players.Value == 2 or players.Value == 3 or players.Value == 4 or players.Value == 5 then

或者你可以有一个更简单的条件,这里有一些想法:

if players.Value > 0 and players.Value <= 5 then
conditions = {[1] = true, [2] = true, [3] = true, [4] = true, [5] = true}

if conditions[players.Value] then

【讨论】:

    【解决方案2】:

    这不是答案,因为上面的人回答了,但这只是为了告诉您脚本出了什么问题,以便您从中学习。你做了 if player.Value == 1 or 2 or 3 or 4 or 5。当你使用 if 语句然后你里面有一个 or 语句。您必须完全重新启动代码。例如,如果 player.Value == 1 或 player.Value == 2 或 player.Value == 3 等,它会起作用。这就是它不起作用的原因。

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 2019-03-05
      • 2012-06-08
      • 2019-08-28
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多