ber Posted November 28, 2020 Share Posted November 28, 2020 (edited) Estou fazendo um sistema de infobox e quando chega uma notificação ela vai aparecendo aos poucos por conta do alpha que vai aumentando, eu fiz de uma maneira simples, uma variável que começa com 0 e a cada onClientRender aumenta 3. Até que funcionou, mas o tempo que aparece e some varia para os players dependendo de quantos FPS roda o jogo dele, por conta do aumento da variável estar num evento onClientRender. Tem como fazer de outra maneira que fique igual para todos os players independentemente do FPS? Exemplo: local alpha = 0 function render() dxDrawImage(x, y, x2, y2, "gfx/test.png", tocolor(255, 255, 255, alpha)) alpha = alpha + 3 end addEventHandler("onClientRender", root, render) Edited November 28, 2020 by ber Link to comment
Other Languages Moderators Lord Henry Posted November 29, 2020 Other Languages Moderators Share Posted November 29, 2020 (edited) Tem sim. Utilize GetTickCount para obter o momento do início do fade e salve numa variável. Depois durante o onClientRender utilize outro GetTickCount e salve em outra variável. Vc pode obter o tempo exato que se passou diminuindo o primeiro do segundo e assim calculando o alpha igual para todos. Exemplo maroto: local inicio = getTickCount() -- Marca o instante em que este resource iniciou. local screenX, screenY = guiGetScreenSize() -- Resolução do jogador. local duration = 2 -- Quantos segundos o efeito de fade deve demorar. function render () local agora = getTickCount() -- Marca o instante deste frame. local diferenca = agora - inicio -- Calcula quantos milisegundos se passaram desde o instante que este resource iniciou até o momento do frame atual. local alpha = diferenca / (4 * duration) -- Só pra não ficar rápido demais, caso contrário o efeito iria durar apenas 255 milisegundos. if (alpha > 255) then alpha = 255 -- Evita erros de valores acima do permitido no alpha. end dxDrawText ("TESTE", 0, 0, screenX, screenY, tocolor (255, 255, 255, math.abs (alpha)), 2, "default-bold", "center", "center") end addEventHandler ("onClientRender", root, render) Edited December 7, 2020 by Lord Henry Link to comment
ber Posted December 3, 2020 Author Share Posted December 3, 2020 On 29/11/2020 at 18:50, Lord Henry said: Tem sim. Utilize GetTickCount para obter o momento do início do fade e salve numa variável. Depois durante o onClientRender utilize outro GetTickCount e salve em outra variável. Vc pode obter o tempo exato que se passou diminuindo o primeiro do segundo e assim calculando o alpha igual para todos. Exemplo maroto: local inicio = getTickCount() -- Marca o instante em que este resource iniciou. local screenX, screenY = guiGetScreenSize() -- Resolução do jogador. local duration = 2 -- Quantos segundos o efeito de fade deve demorar. function render () local agora = getTickCount() -- Marca o instante deste frame. local diferenca = agora - inicio -- Calcula quantos milisegundos se passaram desde o instante que este resource iniciou até o momento do frame atual. local alpha = diferenca / (4 * duration) -- Só pra não ficar rápido demais, caso contrário o efeito iria durar apenas 255 milisegundos. if (alpha > 255) then alpha = 255 -- Evita erros de valores acima do permitido no alpha. end dxDrawText ("TESTE", 0, 0, screenX, screenY, tocolor (255, 255, 255, math.abs (alpha)), 2, "default-bold", "center", "center") end addEventHandler ("onClientRender", root, render) Entendi, achei um pouco confuso pois eu irei utilizar em um infobox que aparecem diversas mensagens simultâneas. Então, pensei se ao invés de utilizar o onClientRender usar um setTimer que aí eu configuro o tempo que eu quero, é possível fazer desta maneira? Link to comment
Other Languages Moderators Lord Henry Posted December 7, 2020 Other Languages Moderators Share Posted December 7, 2020 Sim, é possível usar setTimer. Mas o setTimer depende do framerate. Ou seja, ele vai ser mais rápido em quem tem FPS maior. 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