manawydan Posted August 26, 2014 Share Posted August 26, 2014 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. Link to comment
DNL291 Posted September 7, 2014 Share Posted September 7, 2014 Você poderia ter explicado sobre cada argumento usado na função interpolateBetween (px, py, pz, a, b, c, progreso), acho que iria acrescentar muito mais ao tutorial. Seria bem útil também, deixar comentários pelo código. No entanto, achei uma ótima iniciativa e espero que você possa melhorá-lo para que as pessoas possam aprender sobre isso. 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