Other Languages Moderators Lord Henry Posted February 26, 2020 Other Languages Moderators Share Posted February 26, 2020 (edited) Por isso que sugeri usar objetos invisíveis para animar a câmera, pois é mais fácil entender a lógica do que está acontecendo. O interpolateBetween é meio complicadinho de entender. Sem contar que você vai precisar de 2 simultaneamente, pois cada interpolate só é capaz de interpolar até 3 variáveis, mas a câmera exige 6. A não ser, é claro, que você use posição de target da câmera como fixa e interpole somente a posição dela, mantendo sempre a mesma posição pra onde ela está apontada. Dai sim apenas 1 interpolateBetween já serve. Edited February 26, 2020 by Lord Henry Link to comment
Angelo Pereira Posted February 26, 2020 Share Posted February 26, 2020 Faça assim : Lembrando, remova todo o seu código de cam já feito, que o script se encarregará disso. (Pra não haver problemas). Adicione em meio ao código de inicializaram do painel : local time = 60000 --/> Velocidade da Camera para Chegar no Alvo. local x1,y1,z1 = -711.65728759766,956.55621337891,12.357646942139 --/> Ponto Inicial local x2,y2,z2 = -729.13031005859,835.33831787109,23.970388412476 --/> Ponto Final smoothMoveCamera(x1,y1,z1,x1,y1,z1,x2,y2,z2,x2,y2,z2,time) Abaixo da Função, Então Adicione : local sm = {} sm.moov = 0 local function removeCamHandler() if(sm.moov == 1)then sm.moov = 0 end end local start = nil local animTime = nil local tempPos = {{},{}} local tempPos2 = {{},{}} local function camRender() if (sm.moov == 1) then local now = getTickCount() local x1,y1,z1 = interpolateBetween(tempPos[1][1], tempPos[1][2], tempPos[1][3], tempPos2[1][1], tempPos2[1][2], tempPos2[1][3], (now-start)/animTime, "Linear") local x2,y2,z2 = interpolateBetween(tempPos[2][1], tempPos[2][2], tempPos[2][3], tempPos2[2][1], tempPos2[2][2], tempPos2[2][3], (now-start)/animTime, "Linear") setCameraMatrix(x1,y1,z1,x2,y2,z2) else removeEventHandler("onClientRender",root,camRender) end end function smoothMoveCamera(x1,y1,z1,x1t,y1t,z1t,x2,y2,z2,x2t,y2t,z2t,time) if(sm.moov == 1) then killTimer(timer1) killTimer(timer2) removeEventHandler("onClientRender",root,camRender) fadeCamera(true) end fadeCamera(true) sm.moov = 1 timer1 = setTimer(removeCamHandler,time,1) timer2 = setTimer(fadeCamera, time-1000, 1, false) start = getTickCount() animTime = time tempPos[1] = {x1,y1,z1} tempPos[2] = {x1t,y1t,z1t} tempPos2[1] = {x2,y2,z2} tempPos2[2] = {x2t,y2t,z2t} addEventHandler("onClientRender",root,camRender) return true end Caso de certo, basta fazer ajustes no código. Link to comment
murilo2929 Posted February 26, 2020 Author Share Posted February 26, 2020 20 minutes ago, Angelo Pereira said: Faça assim : Lembrando, remova todo o seu código de cam já feito, que o script se encarregará disso. (Pra não haver problemas). Adicione em meio ao código de inicializaram do painel : local time = 60000 --/> Velocidade da Camera para Chegar no Alvo. local x1,y1,z1 = -711.65728759766,956.55621337891,12.357646942139 --/> Ponto Inicial local x2,y2,z2 = -729.13031005859,835.33831787109,23.970388412476 --/> Ponto Final smoothMoveCamera(x1,y1,z1,x1,y1,z1,x2,y2,z2,x2,y2,z2,time) Abaixo da Função, Então Adicione : local sm = {} sm.moov = 0 local function removeCamHandler() if(sm.moov == 1)then sm.moov = 0 end end local start = nil local animTime = nil local tempPos = {{},{}} local tempPos2 = {{},{}} local function camRender() if (sm.moov == 1) then local now = getTickCount() local x1,y1,z1 = interpolateBetween(tempPos[1][1], tempPos[1][2], tempPos[1][3], tempPos2[1][1], tempPos2[1][2], tempPos2[1][3], (now-start)/animTime, "Linear") local x2,y2,z2 = interpolateBetween(tempPos[2][1], tempPos[2][2], tempPos[2][3], tempPos2[2][1], tempPos2[2][2], tempPos2[2][3], (now-start)/animTime, "Linear") setCameraMatrix(x1,y1,z1,x2,y2,z2) else removeEventHandler("onClientRender",root,camRender) end end function smoothMoveCamera(x1,y1,z1,x1t,y1t,z1t,x2,y2,z2,x2t,y2t,z2t,time) if(sm.moov == 1) then killTimer(timer1) killTimer(timer2) removeEventHandler("onClientRender",root,camRender) fadeCamera(true) end fadeCamera(true) sm.moov = 1 timer1 = setTimer(removeCamHandler,time,1) timer2 = setTimer(fadeCamera, time-1000, 1, false) start = getTickCount() animTime = time tempPos[1] = {x1,y1,z1} tempPos[2] = {x1t,y1t,z1t} tempPos2[1] = {x2,y2,z2} tempPos2[2] = {x2t,y2t,z2t} addEventHandler("onClientRender",root,camRender) return true end Caso de certo, basta fazer ajustes no código. Funcionou muito obrigado, uma duvida tem como fazer que fique dando loop? pois quando ele chega ao ponto final a tela fica toda escura, e tambem ir de frente até ao final pois a camera esta indo de costas. OBS: Muito obrigado. Link to comment
Angelo Pereira Posted February 26, 2020 Share Posted February 26, 2020 1 minute ago, murilo2929 said: Funcionou muito obrigado, uma duvida tem como fazer que fique dando loop? pois quando ele chega ao ponto final a tela fica toda escura, e tambem ir de frente até ao final pois a camera esta indo de costas. OBS: Muito obrigado. Respondendo as duas perguntas, tem. 1. Você precisará configurar o script, ao invés de encerrar, iniciar em outra posição. 2. Você precisará ajusta-lo no setCameraMatrix, ou se não souber, apenas faça a camera andar do SUL, ao Norte. Link to comment
murilo2929 Posted February 26, 2020 Author Share Posted February 26, 2020 46 minutes ago, Angelo Pereira said: Respondendo as duas perguntas, tem. 1. Você precisará configurar o script, ao invés de encerrar, iniciar em outra posição. 2. Você precisará ajusta-lo no setCameraMatrix, ou se não souber, apenas faça a camera andar do SUL, ao Norte. como posso fazer para invés de encerrar ele iniciar em outra pos? Link to comment
Angelo Pereira Posted February 26, 2020 Share Posted February 26, 2020 (edited) 19 minutes ago, murilo2929 said: como posso fazer para invés de encerrar ele iniciar em outra pos? Linha 37, faça (Exemplo dentre outros... --/> Isso se chama gambiar o script HEHE local proxima_tela = 0 --/> Adicione Fora da função, se não vai repetir sempre o 0. timer2 = setTimer( function () fadeCamera(false) if proxima_tela == 0 then local time = 60000 --/> Altere Caso Precisa o Valor do Tempo. local x1,y1,z1 = --/> Adicione Outra Localização de Partida. local x2,y2,z2 = --/> Adicione Outra Localização de Fim. smoothMoveCamera(x1,y1,z1,x1,y1,z1,x2,y2,z2,x2,y2,z2,time) proxima_tela = 1 elseif proxima_tela == 1 then local time = 60000 --/> Altere Caso Precisa o Valor do Tempo. local x1,y1,z1 = --/> Adicione Outra Localização de Partida. local x2,y2,z2 = --/> Adicione Outra Localização de Fim. smoothMoveCamera(x1,y1,z1,x1,y1,z1,x2,y2,z2,x2,y2,z2,time) proxima_tela = 2 --/> Caso Queira Fazer +, e caso queira retorna deixe em 0 end end, timer+1000, 1) --/> O tempo tem que ser acima do atual, para que antes a função acima remova o evento "onClientRender". ) Claro, existe outras formas melhores de se fazer isso, mas apenas foi um exemplo que talvez funcione, ou talvez não. Edited February 26, 2020 by Angelo Pereira 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