[duvida]Animação da Camera (view)

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[duvida]Animação da Camera (view)

Mensagem por Magritte em Dom 17 Nov 2013, 19:51

Olá pessoal o/
Eu estou com uma duvida sobre uma animação da camera(view) que estou tentando fazer, vou tentar explicar o que eu fiz, e o meu problema:

O que eu fiz:(funcionando perfeitamente)
Info adicional: Player tem a velocidade 3.
Quando o player aperta a seta para algum lado, direita ou esquerda, a camera tem a velocidade inicial '2' por 1 segundo, depois ela passa a ter a velocidade do player que é 3! (uma animação básica para a camera...)
O código que eu usei para isto, está no spoiler abaixo!
Código:
Isto está no objeto: o_camera
Info adicional: A variavel 'dir' é para controlar o lado que o player está, dependendo do lado, ele muda a posição da camera:
Fica no evento 'step'
Código:

///Controla a direção da camera, e sua velocidade no 'alarm'
if keyboard_check_pressed(vk_left) or keyboard_check_pressed( ord ("A") ) and dir = false{
    alarm[0]=room_speed
    dir = false
};

if keyboard_check_pressed(vk_right) or keyboard_check_pressed( ord ("D") ) and dir = true{
    alarm[0]=room_speed
    dir = true
};

///Posição da camera:
if global.cs = false and dir = 1{
x=o_martirus.x+260;
y=o_martirus;
};
if global.cs = false and dir = 0{
x=o_martirus.x-260;
y=o_martirus;
};
Obs: tem uma parte do código que eu não botei: quando a tecla é solta, a velocidade da camera volta a ser '2'
Ok, até ai tudo bem...Mas o problema disso, é que quando o player está no lado esquerdo da tela e pressiona a tecla 'esquerda', a camera ainda vai ter a velocidade inicial '2', e a final 3, ou seja, o player continuara no lado esquerdo, indo para a esquerda, e eu tentei resolver isto da seguinte forma:
Como eu tentei resolver:
Código da tentativa:
Esse código eu coloquei antes do de cima, no mesmo step:
Info adicional: dir = true é direita, dir = false é esquerda!
Código:
if keyboard_check_pressed(vk_left) or keyboard_check_pressed( ord ("A") ) and dir = true{
    view_hspeed[0]=18
    dir = false
};

if keyboard_check_pressed(vk_right) or keyboard_check_pressed( ord ("D") ) and dir = false{
    view_hspeed[0]=18
    dir = true
};
Obs: Os erros são:
1-Isso acontece por 1 segundo, acho que por causa do código acima deste!
2-Quando está nessa 'transição' e a pessoa solta a tecla, para na metade da 'transição', e ao apertar novamente para o mesmo lado, o player continua na metade...
O primeiro problema, foi por que, quando é definido o lado correto, ele já está contando isso para o próximo código, que já ativa o alarm 0, por que já foi definida a direção que ele está!

O que eu gostaria:
Que alguém me ajuda-se com este problema, como viram, eu tentei resolver, mas não consegui, eu sei qual foi o problema, mas o problema, é resolver o problema what?, já que eu não consegui pensar em alguma outra forma de resolve-lo...

Obrigado por quem me ajudar, espero que tenham entendido a minha explicação...

Magritte

Número de Mensagens : 163
Idade : 18
Data de inscrição : 22/04/2013
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [duvida]Animação da Camera (view)

Mensagem por Alex FC em Seg 18 Nov 2013, 09:45

Cara, li e reli e ainda não entendi o que tentou fazer. Você quer um atraso na câmera? Respondi uma duvida parecida:

http://gmbr.forumeiros.com/t24868-como-suavizar-a-camera#184435

Pode ser que te ajude. Happy

FLWS!

Alex FC

Ranking : Nota A
Número de Mensagens : 2503
Idade : 23
Data de inscrição : 20/12/2008
Notas recebidas : B A
Reputação : 174
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://redscreensoft.blogspot.com

Voltar ao Topo Ir em baixo

Re: [duvida]Animação da Camera (view)

Mensagem por Magritte em Seg 18 Nov 2013, 14:12

Alex, na verdade não é isso... e eu sou um péssimo 'explicador'...

Bom, é o seguinte:
Funcionou:
Eu configurei a camera, para que sua velocidade inicial ser igual a 2 (por 1 segundo)...
E depois de se passar 1 segundo, ela tenha a velocidade do player!
Não funcionou:
Mas acontece, que quando o player vira para o lado inverso que está indo, por exemplo, vai para a direita, e vira para a esquerda, a camera fica com a velocidade inicial 2, e depois de 1 segundo 3, e por este motivo, ele acaba saindo da view pelo lado esquerdo....
O que eu queria:
Que quando o player estivesse indo para a direita, e vira-se para a esquerda, a camera aumentasse a velocidade de 'transição' de um lado para o outro, e fosse para a onde está o player, mesmo se o jogador soltasse a tecla daquele lado...
Os códigos que eu usei para tentar fazer o que eu queria:

Códigos (pego da info):
Código:
Create Event:
execute code:

global.cs = false //define a CutScene para falseo
dir = true


Alarm Event for alarm 0:
execute code:

view_hspeed[0]=3


 Step Event:
execute code:

///Controles da camera
/* Parte 1:
Basicamente, o que ele faz é: Quando o Jogador aperta essa tecla, e estiver indo para aquele lado,
deixa a camera com um pequeno atraso, para dar um efeito legal */

if keyboard_check_pressed(vk_left) or keyboard_check_pressed( ord ("A") ) and dir = false{
    alarm[0]=room_speed
    dir = false
};

if keyboard_check_pressed(vk_right) or keyboard_check_pressed( ord ("D") ) and dir = true{
    alarm[0]=room_speed
    dir = true
};

/* Parte 2:
O que ele faz, ou era pra fazer, é:
Quando a direção que ele vai é inversa ao que estava indo, deixa a velocidade da view maior
para poder mudar o lado do player para o inverso... */
if keyboard_check_released(vk_left) or keyboard_check_released( ord ("A") ) and dir = true{
    view_hspeed[0]=18
};

if keyboard_check_released(vk_right) or keyboard_check_released( ord ("D") ) and dir = false{
    view_hspeed[0]=18
};
/* Parte 3:
Ele serve para quando o jogador solte a tecla, a velocidade da view seja menor novamente,
Para o efeito funcionar novamente na proxima vez! */
if keyboard_check_released(vk_left) or keyboard_check_released( ord ("A") ){
    view_hspeed[0]=2
};

if keyboard_check_released(vk_right) or keyboard_check_released( ord ("D") ){
    view_hspeed[0]=2
};



if global.cs = false and dir = true{
x=player.x+260;
y=player;
};
if global.cs = false and dir = false{
x=player.x-260;
y=player;
};


Última edição por Magritte em Seg 18 Nov 2013, 14:23, editado 1 vez(es) (Razão : Colocando o código usado)

Magritte

Número de Mensagens : 163
Idade : 18
Data de inscrição : 22/04/2013
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [duvida]Animação da Camera (view)

Mensagem por saim em Seg 18 Nov 2013, 17:19

Código:
if (obj_player . x > 0 and obj_player . x < room_width){
// coloque seu código todo aqui
}
Acho que isso pode ajudar. Não li direito, mas vi que você usa view_speed (coisa que eu não conhecia). Pode ser que precise de um "else view_hspeed[0] := 0".
Valores (0 e room_width) apenas para referência.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [duvida]Animação da Camera (view)

Mensagem por Kabeção em Seg 18 Nov 2013, 18:51

Se é só pelo efeito eu faria da seguinte forma.
dir valera -1 para esquerda e 1 para direita.
Código:
left =  keyboard_check(vk_left) || keyboard_check(ord('A'));
right =  keyboard_check(vk_right) || keyboard_check(ord('D'));

if (right-left) != 0 dir = right-left; // manter a direção mesmo sem tecla pressionada

vx = (player.x+260*dir) - view_wview/2; // calcular posição final da view_xview

// formula para interpolação linear automática
// valor_atual += (valor_final-valor_atual)/fator;
// Quanto menor o fator mais rápido a interpolação
view_xview += (vx-view_xview)/15;


Última edição por Kabeção em Seg 18 Nov 2013, 19:17, editado 1 vez(es)

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [duvida]Animação da Camera (view)

Mensagem por Magritte em Seg 18 Nov 2013, 19:16

#saim
Não era exatamente isso que eu queria... acho que eu não vou conseguir explicar direito...

#Kabeção
Você me salvou cara, era isso mesmo que eu precisava, valeu =)
Só teve um pequeno problema, agora a view mostra a parte que 'não existe' da room, o vazio... mas funcionou, obrigado mesmo =)

Créditos garantidos a todos que me ajudaram, ou tentaram, mas não deu certo por causa da minha explicação...

Magritte

Número de Mensagens : 163
Idade : 18
Data de inscrição : 22/04/2013
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [duvida]Animação da Camera (view)

Mensagem por Conteúdo patrocinado Hoje à(s) 22:55


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum