juaosilv Posted June 27, 2019 Share Posted June 27, 2019 Olá, eu estou utilizando interpolateBetween para fazer alguns "efeitos" em alguns dx. Eu queria fazer vários interpolateBetween mas com um tempo oq eu posso fazer pra por exemplo, assim que o cara abrir o menu executar o interpolateBetween principal e de pois de 5 segundos executar outro interpolateBetween, tentei usar setTime mas a imagem ficou bugada/piscando. Link to comment
Other Languages Moderators Lord Henry Posted June 27, 2019 Other Languages Moderators Share Posted June 27, 2019 Mostre o que vc tentou fazer. Link to comment
juaosilv Posted June 27, 2019 Author Share Posted June 27, 2019 (edited) 5 hours ago, Lord Henry said: Mostre o que vc tentou fazer. Desculpe a demora. function dxPrincipal() prog = math.min(prog+0.02,3) cX,cY,cX = interpolateBetween(0, 0, 0, 0, 165, 0,prog,"OutElastic") dxDrawImage(184, cY, 1000, 455, "graphic/teste2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- to executando esse na hora cX2,cY2,cX2 = interpolateBetween(0, 0, 0, 0, 165, 0,prog,"InElastic") dxDrawImage(184, cY, 1000, 455, "graphic/teste3.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- quero executar esse 5 segundos dps q executa o primeiro end Essas imagens seriam tipo, eu quero executar a primeira que é um fundo, a segunda é uma logo então depois q a primeira cair do "ceu" (por causa do efeito) depois de 5 segundos cai a segunda com outro efeito consegue entender mais ou menos? E outra duvida, depois como eu posso fazer pra imagem ficar flutuando lentamente, subindo e descendo. Obrigado pelo seu tempo! Edited June 27, 2019 by juaosilv Link to comment
Other Languages Moderators Lord Henry Posted June 27, 2019 Other Languages Moderators Share Posted June 27, 2019 (edited) Ta faltando parte do código. Isso que vc mandou só funciona dentro de uma função renderizadora. Edited June 27, 2019 by Lord Henry Link to comment
juaosilv Posted June 27, 2019 Author Share Posted June 27, 2019 5 minutes ago, Lord Henry said: Ta faltando parte do código. Isso que vc mandou só funciona dentro de uma função renderizadora. Editei, mas eu não coloquei pq eu vou utilizar em um login então to utilizando pra testes por botão, você aperta B e abre o dx tendeu. Pra quando ficar pronto eu por no login. Link to comment
Other Languages Moderators Lord Henry Posted June 27, 2019 Other Languages Moderators Share Posted June 27, 2019 Vou supor que esteja com um evento "onClientRender" nessa sua função. Link to comment
juaosilv Posted June 27, 2019 Author Share Posted June 27, 2019 21 minutes ago, Lord Henry said: Vou supor que esteja com um evento "onClientRender" nessa sua função. Sim, então oq posso fazer? Link to comment
Other Languages Moderators Lord Henry Posted June 27, 2019 Other Languages Moderators Share Posted June 27, 2019 (edited) addCommandHandler("testar", function() start = getTickCount() -- Salva o momento atual para usar no cálculo do progresso da animação. addEventHandler("onClientRender", root, interpolationRender) -- Inicia a primeira animação. setTimer (function () -- Depois de 5 segundos, inicia a outra animação. start2 = getTickCount() -- Salva o novo momento atual para usar no cálculo da outra animação. Não pode usar o start pois ele pertence a primeira animação. addEventHandler("onClientRender", root, interpolationRender2) end, 5000, 1) setTimer (function () -- Depois de 10 segundos, para de renderizar tudo. removeEventHandler("onClientRender", root, interpolationRender) removeEventHandler("onClientRender", root, interpolationRender2) start = nil start2 = nil end, 10000, 1) end) function interpolationRender() local now = getTickCount() -- A cada frame, pega o momento atual. local endTime = start + 3000 -- Duração dessa animação: 3 segundos. (momento do final = início + 3 segundos) local elapsedTime = now - start -- Tempo que já passou neste frame: momento de agora - momento que começou local duration = endTime - start -- Duração total da animação: momento do final - momento que começou local progress = elapsedTime / duration -- Progresso atual da animação: tempo que já passou dividido pela duração (pois o progresso é de 0 até 1) if (progress > 1) then -- Impede de repetir a animação depois que ela concluir, mantendo o progresso em 1 se ele for maior. progress = 1 end local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "OutElastic") -- Y vai de 0 até 165 dependendo do progresso atual. dxDrawImage(184, y, 1000, 455, "graphic/teste2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- Draw a imagem com o valor do Y. end function interpolationRender2() local now = getTickCount() local endTime = start2 + 3000 -- Mesma coisa que o de cima, mas usa o start2 para os cálculos. local elapsedTime = now - start2 local duration = endTime - start2 local progress = elapsedTime / duration if (progress > 1) then progress = 1 end local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "InElastic") -- Esse efeito não parece fazer sentido. Mas está funcionando. dxDrawImage(184, y, 1000, 455, "graphic/teste3.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end Edited June 27, 2019 by Lord Henry corrigida indentação 1 Link to comment
juaosilv Posted June 27, 2019 Author Share Posted June 27, 2019 1 minute ago, Lord Henry said: addCommandHandler("testar", function() start = getTickCount() -- Salva o momento atual para usar no cálculo do progresso da animação. addEventHandler("onClientRender", root, interpolationRender) -- Inicia a primeira animação. setTimer (function () -- Depois de 5 segundos, inicia a outra animação. start2 = getTickCount() -- Salva o novo momento atual para usar no cálculo da outra animação. Não pode usar o start pois ele pertence a primeira animação. addEventHandler("onClientRender", root, interpolationRender2) end, 5000, 1) setTimer (function () -- Depois de 10 segundos, para de renderizar tudo. removeEventHandler("onClientRender", root, interpolationRender) removeEventHandler("onClientRender", root, interpolationRender2) start = nil start2 = nil end, 10000, 1) end) function interpolationRender() local now = getTickCount() -- A cada frame, pega o momento atual. local endTime = start + 3000 -- Duração dessa animação: 3 segundos. (momento do final = início + 3 segundos) local elapsedTime = now - start -- Tempo que já passou neste frame: momento de agora - momento que começou local duration = endTime - start -- Duração total da animação: momento do final - momento que começou local progress = elapsedTime / duration -- Progresso atual da animação: tempo que já passou dividido pela duração (pois o progresso é de 0 até 1) if (progress > 1) then -- Impede de repetir a animação depois que ela concluir, mantendo o progresso em 1 se ele for maior. progress = 1 end local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "OutElastic") -- Y vai de 0 até 165 dependendo do progresso atual. dxDrawImage(184, y, 1000, 455, "graphic/teste2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) -- Draw a imagem com o valor do Y. end function interpolationRender2() local now = getTickCount() local endTime = start2 + 3000 -- Mesma coisa que o de cima, mas usa o start2 para os cálculos. local elapsedTime = now - start2 local duration = endTime - start2 local progress = elapsedTime / duration if (progress > 1) then progress = 1 end local x, y, z = interpolateBetween (0, 0, 0, 0, 165, 0, progress, "InElastic") -- Esse efeito não parece fazer sentido. Mas está funcionando. dxDrawImage(184, y, 1000, 455, "graphic/teste3.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) end Obrigado irei testar mais tarde, kkkk sobre o efeito não fazer sentido é pq eu to testando ai não botei o efeito que irei utilizar mesmo botei um aleatorio so pra testes. 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