Controle de hits por ataque

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

Resolvido Controle de hits por ataque

Mensagem por D'Tois em Qui 13 Jan 2011, 16:16

Eu tentei criar um sistema de combos de jogo de ação, porém não consigo fazer sair a quantidade de hits correta, se possível queria que vissem os códigos que usei:


Esse evento determina o sprite do ataque e também delimita o tempo para começar um combo
Código:
if combo=1 //VARIÁVEL QUE DEFINE QUAL SERÁ O ATAQUE DO COMBO. EX: 1º=SOCO, 2º=CHUTE
{
if global.atacando=true { sprite_index=pol_soco; image_speed=0.4 }
http://GLOBAL.ATACANDO É A VARIÁVEL QUE DIZ SE O JOGADOR ESTÁ EXECUTANDO UM ATAQUE OU NÃO

//"COMBO TIMER" É UM CONTADOR QUE INDICA QUAL MOMENTO O JOGADOR DEVE APERTAR A TECLA DE ATAQUE PARA CONTINUAR O COMBO, E TAMBÉM INDICA QUAL O TEMPO PARA RESETAR O COMBO

 if combo_timer>40{combo_timer=0; combo=0}
//CASO O JOGADOR NÃO CLIQUE A TEMPO O CONTADOR DE COMBO RESETA
}



Nesse código,
Código:
if combo>0{combo_timer+=1}
//AO DAR O PRIMEIRO ATAQUE, O CRONÔMETRO INICIA A CONTAGEM



Código:
if global.atacando=false //CASO O PERSONAGEM NÃO ESTEJA ATACANDO
{
  //SOCO
  if keyboard_check_pressed(ord('Z')) and combo=0 and combo_timer=0
  {
  combo=1;
  global.atacando=true; //VARIÁVEL GLOBAL QUE INDICA O ATAQUE DO PERSONAGEM
  global.hits_dados=1; //VARIÁVEL GLOBAL QUE INDICA QUANTOS HITS O INIMIGO VAI RECEBER
 
  alarm[0]=10; //O ALARM 0 TORNA A VARIÁVEL "global.atacando" FALSE, OU SEJA É O FIM DO ATAQUE
  global.dano_ini=random(ceil(4))+2; //A QUANTIDADE ALEATÓRIA DE DANO QUE O INIMIGO RECEBERÁ


  //SOCO 2
    if keyboard_check_pressed(ord('Z')) and combo=1 and combo_timer>=5
  //SE O JOGADOR CLICAR O BOTÃO DE ATAQUE APÓS O 1º GOLPE ELE DARÁ O 2º
    {
    combo=2;
    combo_timer=0; //O COMBO TIMER VAI RESETAR AGORA, PORQUE ESSE É O ULTÍMO GOLPE
    global.atacando=true;
    global.hits_dados=1;
    global.dano_ini=random(ceil(4))+2;
    alarm[0]=10;
    //ASSIM QUE O ALARM ENTRAR EM AÇÃO, O GLOBAL.ATACANDO VAI SER FALSE, E O COMBO_TIMER CONTINUARÁ AUMENTANDO O VALOR ATÉ ELE RESETAR CONFORME O CÓDIGO ACIMA
    }

  }
}




Esse aqui é um código no evento step de qualquer objeto que seja um inimigo no jogo, esse evento é do acontece no momento que ele recebe o ataque do obj_player
Código:
if instance_exists(obj_player)
{
  if distance_to_object(obj_player)<=15 and global.atacando=true
//SE O JOGADOR ESTIVER PRÓXIMO DO INIMIGO ENQUANTO SEU ATAQUE ESTIVER SENDO EXECUTADO
  {

    hits_recebidos = global.hits_dados; //ESSA VARIÁVEL VERIFICA A VARIÁVEL GLOBAL "global.hits_dado"
E RECEBE A MESMA QUANTIDADE
 
    if hits_recebidos>0 { vida-=global.dano_ini; hits_recebidos-=1 }

  //DIGAMOS, POR EXEMPLO, QUE O OBJ_PLAYER DÁ UM ATAQUE COM 3 HITS, ISSO SERÁ VERIFICADO NO CÓDIGO ACIMA E SERÁ DESCONTADO O DANO NO INIMIGO E POR HIT, OS HITS SERÃO DESCONTADOS UM POR UM ATÉ ACABAR

  }
}


O código funciona bem, o problema é que sempre sai mais de um hit por ataque, mesmo eu usando a variável que controla essa quantidade, alguém aí sabe como eu posso resolver isso?


Última edição por D'Tois em Sab 15 Jan 2011, 14:21, editado 1 vez(es)

D'Tois

Número de Mensagens : 22
Idade : 22
Data de inscrição : 05/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por itallo em Qui 13 Jan 2011, 17:05

você pode criar um objeto invisível.
que quando colidir com o inimigo:
other.life -= dano
instance_destroy()

fica mais simples para controlar....

itallo

Ranking : Sem avaliações
Número de Mensagens : 969
Idade : 24
Data de inscrição : 26/08/2009
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.zuluhotel.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por D'Tois em Qui 13 Jan 2011, 19:44

Só que os hits devem ser descontados por inimigo.

Por exemplo:
Tem dois inimigos e eu comando o personagem para dar um chute de 1 hit, daí os dois recebem 1 hit cada, no caso que você mencionou o objeto se destruiria e um dos inimigos não receberia dano.

D'Tois

Número de Mensagens : 22
Idade : 22
Data de inscrição : 05/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por itallo em Qui 13 Jan 2011, 20:30

quando você apertar o botão de soco.
ele cria um objeto no lado em que você deu o soco.
dai ficaria assim:

instance_create(x+70,y,odano)

se o inimigo colidir com o objeto odano o objeto odano se destroi e o inimigo perde life.

itallo

Ranking : Sem avaliações
Número de Mensagens : 969
Idade : 24
Data de inscrição : 26/08/2009
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.zuluhotel.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por D'Tois em Qui 13 Jan 2011, 23:46

Eu sei, mas se tiver dois inimigos recebendo o mesmo ataque?

Esse objeto vai ser destruído com o 1º inimigo e o 2º vai sair ileso.

D'Tois

Número de Mensagens : 22
Idade : 22
Data de inscrição : 05/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por itallo em Sex 14 Jan 2011, 00:31

ai é osso....
então faz o seguinte:

deixa o valor do dano como
dano/quantidade de frames que tem a animação do objeto atacando...

assim não irá passar do valor do dano

itallo

Ranking : Sem avaliações
Número de Mensagens : 969
Idade : 24
Data de inscrição : 26/08/2009
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.zuluhotel.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por D'Tois em Sex 14 Jan 2011, 00:47

Você quer dizer:

No código do personagem:
Código:

if sprite_index=soco
{
if image_index=4 {global.atacando=true; global.dano_que_vai_causar=8}
}



No código do inimigo:
Código:

if distance_to_object(obj_jogador)<=15 and global.atacando=true
{
vida -= global.dano_que_vai_causar
}

Isso?

D'Tois

Número de Mensagens : 22
Idade : 22
Data de inscrição : 05/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por itallo em Sex 14 Jan 2011, 11:15



No código do personagem:
Código:

if sprite_index=soco
{
if image_index=4 {global.atacando=true; global.dano_que_vai_causar=8/image_number}///dano dividido pelo numero de frames da sprite.
}



No código do inimigo:
Código:

if distance_to_object(obj_jogador)<=15 and global.atacando=true
{
vida -= global.dano_que_vai_causar
}


itallo

Ranking : Sem avaliações
Número de Mensagens : 969
Idade : 24
Data de inscrição : 26/08/2009
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   :
   :

http://www.zuluhotel.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por D'Tois em Sex 14 Jan 2011, 19:39

Deu não, apareceu dezenas de hits seguidos durante o frame. :|

EDIT: consegui resolver com isso:

Create do personagem:
Código:
global.hit=false


E no step:
Código:
if keyboard_check_pressed(ord('Z')) and combo=0 and combo_timer=0
  {
  combo=1;
  global.atacando=true;
  global.dano_ini=random(ceil(4*forca))+2;
 
  global.hit=true;
 }

Create do inimigo:
Código:
hit=true

Step do inimigo:
Código:

if instance_exists(jogador)
{
  if distance_to_object(polegar)<=15 and global.atacando=true
 {
  if hit=true
  { vida-=global.dano_ini; hit=false }
 }
}

if global.hit=false{hit=true}

Mesmo assim obrigado por responderem, eu consegui pensar nessa solução. Taí o código caso alguém queira utilizar.

D'Tois

Número de Mensagens : 22
Idade : 22
Data de inscrição : 05/01/2011
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Controle de hits por ataque

Mensagem por Conteúdo patrocinado Hoje à(s) 08:32


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