Jump to content

Tela de login


Recommended Posts

  • Other Languages Moderators

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 by Lord Henry
Link to comment

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
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
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
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 by Angelo Pereira
Link to comment

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...