Tony Scripter Posted May 28, 2021 Share Posted May 28, 2021 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 androksi Posted May 28, 2021 Other Languages Moderators Share Posted May 28, 2021 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
Tony Scripter Posted May 28, 2021 Author Share Posted May 28, 2021 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 androksi Posted May 28, 2021 Other Languages Moderators Share Posted May 28, 2021 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
Tony Scripter Posted May 28, 2021 Author Share Posted May 28, 2021 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now