Мой цикл зацикливается больше, чем должен - PullRequest
0 голосов
/ 04 декабря 2018

Сценарий должен постепенно увеличивать эффект свечения за счет уменьшения прозрачности.Как только объект больше не касается, он должен постепенно терять свечение, пока он больше не светится, увеличив прозрачность обратно до 1.

Поскольку у меня есть печать числовых значений во время работы, я вижу, чтозначения превышают 1 и, кажется, считаются с более высокими интервалами, чем 0,01, установленное в цикле.Он не работает постепенно - он обрывается или резко включается по мере прохождения цикла.

Я не могу понять, почему он превышает 1 или как сохранить его как постепенное увеличение, даже когда касание заканчивается до достижения 100 итераций цикла.

Вот сценарий:

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)

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Событие Touched может запускаться несколько раз.

Вы можете узнать больше об этом и как это исправить здесь .

0 голосов
/ 04 декабря 2018

В конце цикла, который считает, 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).Не уверен, что лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...