为什么描述中的代码不能正常工作,它应该逐渐改变 RGB 值

顺便说一下,这是在 Roblox Lua 中。 如果你想知道结果是什么,它只是一个不改变颜色的黑色块。

local part = Instance.new("Part")
part.Parent = game.Workspace
local maxRGBValue = 99*3
local r = 0
local g = 0
local b = 0
while r + g + b ~= maxRGBValue do
    wait(1)
    local r = r + 10
    local g = g + 10
    local b = b + 10
    part.Color = Color3.fromRGB(r,g,b)
end
local r = 0
local g = 0
local b = 0
点赞
用户459640
用户459640

local 语法每次程序到达该语句时都会创建一个全新的变量。因此,实际上您拥有三个名为 r、三个名为 g 和三个名为 b 的不同变量,就好像代码是这样的:

local part = Instance.new("Part")
part.Parent = game.Workspace
local maxRGBValue = 99*3
local r1 = 0
local g1 = 0
local b1 = 0
while r1 + g1 + b1 ~= maxRGBValue do
    wait(1)
    local r2 = r1 + 10
    local g2 = g1 + 10
    local b2 = b1 + 10
    part.Color = Color3.fromRGB(r2,g2,b2)
end
local r3 = 0
local g3 = 0
local b3 = 0

因此,r1g1b1 的值从初始的零值始终不会改变,r2g2b2 每次都是确切的 10,而变量 r3g3b3 则是无用的。

通常情况下,您应该只在对变量首次提及时使用 local。此外,如果您希望变量的值在循环的不同迭代或函数的不同调用之间保持不变,请确保 local 声明位于该循环或函数之前。

因此,更好的代码应该是(但未经测试):

local part = Instance.new("Part")
part.Parent = game.Workspace
local maxRGBValue = 99*3
local r = 0
local g = 0
local b = 0
while r + g + b < maxRGBValue do
    wait(1)
    r = r + 10
    g = g + 10
    b = b + 10
    part.Color = Color3.fromRGB(r,g,b)
end

我还将 ~= maxRGBValue 更改为 < maxRGBValue。使用相等性检查,循环永远不会终止,因为 r+g+b 将从 90*3 变为 100*3,并且永远不等于 99*3

2020-11-25 03:47:27