Eai pessoal,
Hoje tentarei fazer um tutorial sobre a função "interpolateBetween", segundo a wiki (traduzida):Interpola um vetor 3D entre um valor de origem e um valor-alvo usando interpolação linear ou de qualquer outro.
Então ela pode ser usada para interpolar(seria algo como pegar valores entre o inicio e o fim de valores, entenderam melhor vendo o tutorial).
-- teste interpolação
local px,py,pz,a,b,c
local iniciou = false
local tempoIni = false
local tempoFin = false
local roda = nil
addCommandHandler("teste",
function()
if(iniciou)then outputChatBox("Ja esta iniciado") return end
px,py,pz = getElementPosition(localPlayer)
local r = getPedRotation(localPlayer)
a,b,c = px+math.sin(math.rad(-r))*10,py+math.cos(math.rad(-r))*10,pz
tempoIni = getTickCount()
tempoFin = tempoIni+10000
roda = createObject(1085,a,b,c)
addEventHandler("onClientRender",root,interpoleRender)
end)
function interpoleRender()
local tickAgora = getTickCount()
local tempoPassado = tickAgora - tempoIni
local duration = tempoFin - tempoIni
local progreso = tempoPassado / duration
if(tickAgora>=tempoFin)then
removeEventHandler("onClientRender",root,interpoleRender)
else
local x,y,z = interpolateBetween(px,py,pz,a,b,c,progreso,"InElastic")
outputChatBox(x)
setElementPosition(roda,x,y,z)
end
end
Basicamente, criamos um objeto na frente do jogador(por isso tive que usar seno e coseno) e entao movemos ele pra frente, a função de interpolação que eu usei é "InElastic", nela os primeiros valores são baixos, alguns até negativos, e o final é mais rápido(parecendo um movimento de elástico). Teste você tambem para ver o efeito.
Você pode acessar as funções de interpolação(Easing) em https://wiki.multitheftauto.com/wiki/Easing
Por inquanto é isso, pretendo dar mais alguns exemplos para vocês (e eu ja que nunca usei essa função)entenderem.
Video exemplo:
Script do marker colorido:
-- teste interpolação
local r,g,b,a,b2,c
local iniciou = false
local tempoIni = false
local tempoFin = false
local roda = nil
addCommandHandler("teste",
function()
if(iniciou)then outputChatBox("Ja esta iniciado") return end
local x,y,z = getElementPosition(localPlayer)
tempoIni = getTickCount()
tempoFin = tempoIni+5000
r,g,b=255,0,0
a,b2,c = 0,0,255
roda = createMarker(x,y,z,"cylinder",1,r,g,b,255)
addEventHandler("onClientRender",root,interpoleRender)
end)
function interpoleRender()
local tickAgora = getTickCount()
local tempoPassado = tickAgora - tempoIni
local duration = tempoFin - tempoIni
local progreso = tempoPassado / duration
if(tickAgora>=tempoFin)then
removeEventHandler("onClientRender",root,interpoleRender)
else
local x,y,z = interpolateBetween(r,g,b,a,b2,c,progreso,"Linear")
setMarkerColor(roda,x,y,z,255)
end
end
Esse foi apenas um tutorial básico para se ter noção desta função. Esta é a primeira vez que a utilizo então me corrijam se eu estiver errado.