该脚本应该通过降低透明度来逐渐增加发光效果。一旦不再触摸物体,则应通过将透明度增加回1来逐渐失去发光,直到不再发光为止。
由于它在运行时打印数字值,因此我看到这些值超过了1,并且似乎比循环中设置的.01高。它不会逐渐起作用-在循环中切出或突然切开。
即使触摸在到达循环的100次迭代之前结束,我也无法弄清楚为什么它超过1或如何使其逐渐增加。
这是脚本:
local glow = script.Parent.orb
glow1 = 1
-- turn on when touched
glow.Touched:connect(function(obj)
if obj.Parent:FindFirstChild("Humanoid") then
for i = 0, 1, .01 do
glow1 = glow1 - .01
glow.ParticleEmitter.Transparency = NumberSequence.new(glow1)
wait(.1)
print(glow1)
end
glow1=0
end
end)
-- turn off when no longer touched
glow.TouchEnded:connect(function(obj)
wait(3)
if obj.Parent:FindFirstChild("Humanoid") then
for i = 0, 1, .01 do
glow1 = glow1 + .01
glow.ParticleEmitter.Transparency = NumberSequence.new(glow1)
wait(.1)
print(glow1)
end
end
end)
答案 0 :(得分:3)
在递增计数的循环结束时,glow1
大于0,因为0.01不能精确地表示为浮点数。在我的计算机上,它的值实际上是0.01000000000000000020816681711721685132943093776702880859375。我猜这是基数2中最接近的近似值。 (尝试print(('%.99f'):format(0.01))
来查看计算机上的确切值。)因此,乘以100会大于1。
还有其他一些海报作者在Lua的数学方面比我更好,但是正如csaar可能暗示的那样,您可以使用repeat until
循环来确保glow1
不会越界值(glow1 = 0.01 repeat --[[ do something here ]] glow1 = glow1 + .01 until glow1 > 1
),也可以计数和除以(for i = 1, 100 do glow1 = i / 100 --[[ do something here ]] end
)。不知道哪个更好。
答案 1 :(得分:1)
Touched事件可能会触发多次。
您可以了解有关它的更多信息以及如何修复它here。