'random' 的参数错误

这是我的代码

while true do
    script.Parent.Position = Vector3.new((math.random(-41.994,15.471)),0.5,(math.random(129.514,69.442)))
    script.Parent.Color = Color3.new(math.random(0,255), math.random(0,255), math.random(0,255))
    wait(1)
end

我使用的编程语言是 Lua

当我尝试使用这段代码时,出现了以下错误:

"15:50:47.926 - Workspace.rock outer walls.Model.Rocks.Part0.Script:2: bad argument #2 to 'random' (interval is empty)"

这段代码的目的是在不离开同一 y 轴的情况下随机传送脚本所在的部分。

请问有人能给我一些解释吗?

Ps. 以前我在这个网站上发了一篇粗鄙的帖子,因为我对很多东西感到困惑,现在我更明白一些东西,所以我想为我的愚蠢道歉 ~Zeeen

点赞
用户7396148
用户7396148

在 Lua 中,math.random 可以有三种使用方法:

  • 不带参数调用
  • 带一个整数参数调用
  • 带两个整数参数调用

它不接受 -41.99415.471 这样的值,这就是为什么你会收到错误信息的原因。

如果将你的值更改为 -4115,就不应该再出现错误。


Lua 5.3 参考手册:http://www.lua.org/manual/5.3/manual.html#pdf-math.random

math.random([m [, n]])

当没有参数调用时,返回在区间 [0,1) 内具有均匀分布的伪随机浮点数。当使用两个整数 m 和 n 进行调用时,math.random 返回具有在区间 [m, n] 内具有均匀分布的伪随机整数。(值 n-m 不能为负并且必须适合 Lua 整数。)调用 math.random(n) 等价于 math.random(1,n)

此函数为提供 C 的底层伪随机生成函数的接口。

2019-12-27 00:36:55
用户827263
用户827263

正如 Nifim 的答案所指出的,Lua 中有三种调用 math.random 的方法。

没有参数时,它将返回范围在 0.0 到 1.0 之间的实数。

有一个或两个整数参数时,它将返回一个整数。

这些都不直接给你想要的,我假设你想要的是在指定范围内的随机实数。

为了做到这一点,你需要调用 math.random,没有参数,然后调整结果。

例如,如果你想要一个在 5.0 和 10.0 之间的随机数,你可以使用

math.random() * 5.0 + 5.0

考虑编写自己的包装函数,它接受两个浮点参数并调用 math.random

function random_real(x, y)
    return x + math.random() * (y-x)
end
2019-12-27 01:10:20