【发布时间】:2022-09-28 17:23:16
【问题描述】:
抱歉问这个问题,但我听不懂
-- but i don\'t understand this code
ballDX = math.random(2) == 1 and 100 or -100
--here ballDY will give value between -50 to 50
ballDY = math.random(-50, 50)
我不明白结构什么是(2)以及为什么它== 1
十分感谢
抱歉问这个问题,但我听不懂
-- but i don\'t understand this code
ballDX = math.random(2) == 1 and 100 or -100
--here ballDY will give value between -50 to 50
ballDY = math.random(-50, 50)
我不明白结构什么是(2)以及为什么它== 1
十分感谢
math.random(x) 将随机返回一个介于 1 和 x 之间的整数。
所以math.random(2) 会随机返回 1 或 2。
如果它返回 1 (== 1),ballDX 将被设置为 100。
如果它返回 2 (~= 1),ballDX 将被设置为 -100。
一个简单的方法来获得 50-50 的机会。
【讨论】:
这是在 Lua 中基于条件分配变量的一种非常常见的方式。这和你做的一样,例如,在 Python 中使用“foo = a if x else b”: 第一个函数 math.random(2) 返回 1 或 2。因此,如果它返回 1,则 math.random(2) == 1 部分为真,因此您将 100 分配给变量 ballDX。否则,将 -100 分配给它。
【讨论】:
在lua中
result = condition and first or second
基本意思相同
if condition and first ~= nil and first ~= false then
result = first
else
result = second
end
所以在你的情况下
if math.random(2) == 1 then
ballDX = 100
else
ballDX = -100
end
换句话说,ballDX 有 50/50 的机会变为 100 或 -100
【讨论】:
first 为真时才正确。
为了更好地理解,查看 lua 文档有很大帮助: https://www.lua.org/pil/3.3.html
你可以阅读:运算符 or 如果不为假则返回其第一个参数;否则,它返回它的第二个参数:
因此,如果随机数为 1,它将返回“或”的第一个参数 (100),否则将返回第二个参数 (-100)。
【讨论】: