Затемнение изображения снова и снова - PullRequest
1 голос
/ 10 июля 2019

Итак, я пытаюсь создать заставку, которая исчезает на изображении splash1.png, а затем через пару секунд снова исчезает.Итак, я сделал так, чтобы экран начинал полностью черным, затем изменил альфа цвета на 1, а затем он должен был исчезнуть до черного.Но в настоящее время кажется, что он застревает на сцене fadein и не выходит за рамки этого.Если у кого-то есть какие-либо исправления или альтернативы тому, что я делаю, я буду очень признателен.

function love.load()
    timer = 0
    alpha = 0
    fadein  = 300
    display = 500
    fadeout = 900
    splashScreen = love.graphics.newImage("images/Splash1.png")
end

function love.update(dt)
    timer=timer+dt
    if timer<fadein then alpha=timer/fadein  print("fadein")
    elseif timer<display then alpha=1  print("display")
    elseif timer<fadeout then alpha=1-((timer-display)/(fadeout-display))print("fadeout")

    else alpha=1 end

end

function love.draw()
    love.graphics.setColor(255, 255, 255, alpha*255)
    local sx = love.graphics.getWidth() / splashScreen:getWidth()
    local sy = love.graphics.getHeight() / splashScreen:getHeight()
    love.graphics.draw(splashScreen, 0, 0, 0, sx, sy) -- x: 0, y: 0, rot: 0, scale x and scale y
end

1 Ответ

1 голос
/ 15 июля 2019

Извините, это заняло у меня так много времени, чтобы ответить.Следующий код должен достичь того, что вы ищете:

function love.load()
    timer = 0
    alpha = 0
    fadein  = 3
    display = 6
    fadeout = 9
    splashScreen = love.graphics.newImage("image.png")
end

function love.update(dt)
    timer = timer + dt
    if 0 < timer and timer < fadein then 
        alpha = timer / fadein  
    end
    if fadein < timer and timer < display then 
        alpha = 1  
    end
    if display < timer and timer < fadeout then 
        alpha = 1 - ((timer - display) / (fadeout - display))
    end
end

function love.draw()
    love.graphics.setColor(1, 1, 1, alpha)
    local sx = love.graphics.getWidth() / splashScreen:getWidth()
    local sy = love.graphics.getHeight() / splashScreen:getHeight()
    love.graphics.draw(splashScreen, 0, 0, 0, sx, sy)
end

Основные отличия от вашего кода:

  • Я переключил операторы elseif на if операторов и дали верхнюю и нижнюю границы для проверки timer.Проблема с вашей версией в том, что первый оператор if будет правдивым каждый раз, поэтому программа даже не будет смотреть на другие;

  • Я изменил значения для fadein, display и fadeout.Если вы используете dt в качестве счетчика для анимации, имейте в виду, что он рассчитывается довольно медленно, для стандартного монитора приведенные в качестве примера значения должны дать вам хорошую отправную точку:

  • Я изменил ваши setColor значения в масштабе от [0, 1].Я почти уверен, что масштаб 255 работает, но я не пробовал.

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