影像先淡入,然后再淡出

时间:2019-07-10 08:09:18

标签: love2d

因此,我尝试创建一个初始屏幕,该初始屏幕在图像splash1.png中逐渐消失,然后在几秒钟后再次逐渐消失。因此,我要做的是使屏幕开始完全为黑色,然后将颜色的alpha更改为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 个答案:

答案 0 :(得分:1)

抱歉,我花了这么长时间回答。以下代码应能满足您的需求:

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语句每次都是正确的,因此该程序甚至不会查看其他语句。

  • 我更改了fadeindisplayfadeout的值。如果您使用dt作为动画计数器,请注意它的计数速度很慢,对于标准监视器,我输入的示例值应为您提供一个很好的起点:

  • 我将您的setColor的值更改为从[0, 1]的比例。我很确定255刻度可以工作,但是我还没有尝试过。