Jump to content

Recommended Posts

Olá pessoal eu não sou muito de fazer animações em dx então eu precisava de uma ajuda, estou fazendo um painel e queria saber como eu poderia fazer uma animação de opacidade, que nunca para para colocar na logo do painel, a animação seria aplicada na opacidade da logo indo de 0 a 255

Link to comment
  • Other Languages Moderators

Olá.

local animationAlpha = 0

local function render()
    animationAlpha = math.min(animationAlpha + 0.08, 1) -- Vai de 0 a 1. Basta multiplicar pelo valor máximo

    dxDrawImage(0, 0, 200, 200, tocolor(255, 255, 0, animationAlpha * 255), false) -- Exemplo com o valor máximo sendo 255
    dxDrawImage(0, 205, 200, 200, tocolor(255, 0, 0, animationAlpha * 100), false) -- Exemplo com o valor máximo sendo 100
end

-- Supondo que esta seja a função de abrir o painel
bindKey("u", "down", function()
    animationAlpha = 0
    addEventHandler("onClientRender", root, render)
end)

Como dito no comentário dentro do código, a variável animationAlpha armazena o valor 0, que vai até o valor 1. Com esse valor, bastaria multiplicar pelo valor máximo, pois qualquer número multiplicado por 1, é ele mesmo.

A biblioteca math possui um método chamado min, que pega o MENOR valor. No caso do exemplo, a variável está sendo incrementada com + 0.08, até chegar a 1. Então, se o valor for maior que 1, ele vai pegar o menor valor, que é 1, como eu defini.

Link to comment
15 minutes ago, andr0xy said:

Olá.


local animationAlpha = 0

local function render()
    animationAlpha = math.min(animationAlpha + 0.08, 1) -- Vai de 0 a 1. Basta multiplicar pelo valor máximo

    dxDrawImage(0, 0, 200, 200, tocolor(255, 255, 0, animationAlpha * 255), false) -- Exemplo com o valor máximo sendo 255
    dxDrawImage(0, 205, 200, 200, tocolor(255, 0, 0, animationAlpha * 100), false) -- Exemplo com o valor máximo sendo 100
end

-- Supondo que esta seja a função de abrir o painel
bindKey("u", "down", function()
    animationAlpha = 0
    addEventHandler("onClientRender", root, render)
end)

Como dito no comentário dentro do código, a variável animationAlpha armazena o valor 0, que vai até o valor 1. Com esse valor, bastaria multiplicar pelo valor máximo, pois qualquer número multiplicado por 1, é ele mesmo.

A biblioteca math possui um método chamado min, que pega o MENOR valor. No caso do exemplo, a variável está sendo incrementada com + 0.08, até chegar a 1. Então, se o valor for maior que 1, ele vai pegar o menor valor, que é 1, como eu defini.

Entendi esse metodo porem, eu estou tentando fazer do seguinte modo quando a opacidade alcança 255 ela volta descendo para 0 quando ela alcança 0 ela volta subindo para 255, isso e possivel ?

Link to comment
  • Other Languages Moderators

Entendi. Você pode fazer desta forma:

local animationAlpha = 0
local animationDelta = 0.08
local animationStep

local function render()
    if animationStep == "in" then
        animationAlpha = math.min(animationAlpha + animationDelta, 1) -- Vai de 0 a 1. Basta multiplicar pelo valor máximo
        if animationAlpha == 1 then
            animationStep = "out"
        end
    elseif animationStep == "out" then
        animationAlpha = math.max(animationAlpha - animationDelta, 0) -- Vai de 1 a 0.
        if animationAlpha == 0 then
            animationStep = "in"
        end
    end

    dxDrawImage(0, 0, 200, 200, tocolor(255, 255, 0, animationAlpha * 255), false) -- Exemplo com o valor máximo sendo 255
    dxDrawImage(0, 205, 200, 200, tocolor(255, 0, 0, animationAlpha * 100), false) -- Exemplo com o valor máximo sendo 100
end

-- Supondo que esta seja a função de abrir o painel
bindKey("u", "down", function()
    animationAlpha = 0
    animationStep = "in"
    addEventHandler("onClientRender", root, render)
end)

 

Link to comment
4 hours ago, andr0xy said:

Entendi. Você pode fazer desta forma:


local animationAlpha = 0
local animationDelta = 0.08
local animationStep

local function render()
    if animationStep == "in" then
        animationAlpha = math.min(animationAlpha + animationDelta, 1) -- Vai de 0 a 1. Basta multiplicar pelo valor máximo
        if animationAlpha == 1 then
            animationStep = "out"
        end
    elseif animationStep == "out" then
        animationAlpha = math.max(animationAlpha - animationDelta, 0) -- Vai de 1 a 0.
        if animationAlpha == 0 then
            animationStep = "in"
        end
    end

    dxDrawImage(0, 0, 200, 200, tocolor(255, 255, 0, animationAlpha * 255), false) -- Exemplo com o valor máximo sendo 255
    dxDrawImage(0, 205, 200, 200, tocolor(255, 0, 0, animationAlpha * 100), false) -- Exemplo com o valor máximo sendo 100
end

-- Supondo que esta seja a função de abrir o painel
bindKey("u", "down", function()
    animationAlpha = 0
    animationStep = "in"
    addEventHandler("onClientRender", root, render)
end)

 

Perfeito era exatamente dessa forma, eu até tentei fazer com 2 variaveis mas nao tive sucesso mas agora eu sei por qual motivo, obrigado.?

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...