Sign in to follow this  
juaosilv

Ajuda com interpolateBetween

Recommended Posts

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.

Share this post


Link to post

Mostre o que vc tentou fazer.

Share this post


Link to post
Posted (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 by juaosilv

Share this post


Link to post
Posted (edited)

Ta faltando parte do código. Isso que vc mandou só funciona dentro de uma função renderizadora.

Edited by Lord Henry

Share this post


Link to post
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.

Share this post


Link to post

Vou supor que esteja com um evento "onClientRender" nessa sua função.

Share this post


Link to post
21 minutes ago, Lord Henry said:

Vou supor que esteja com um evento "onClientRender" nessa sua função.

Sim, então oq posso fazer?

Share this post


Link to post
Posted (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 by Lord Henry
corrigida indentação
  • Thanks 1

Share this post


Link to post
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.

 

Share this post


Link to post

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.