Conectar-se

Esqueci minha senha

Últimos assuntos
» [Enquete] Concursos GMBR
por Willy Ontem à(s) 19:49

» CR - Concurso Relâmpago!!
por Willy Ter 18 Jul 2017, 17:11

» 3D:como rodar a camara em horizontal?
por Cambalinho Ter 18 Jul 2017, 15:09

» [Resolvido] pode explicar a d3d_set_projection()?
por Cambalinho Ter 18 Jul 2017, 11:28

» Escrever a resposta certa muda de room
por PedroX Seg 17 Jul 2017, 21:46

» Nota de esclarecimento - GMBR voltou!
por Mentos e Coca-cola Seg 17 Jul 2017, 17:05

» [CR] Campo Minado
por Katerp Dom 16 Jul 2017, 23:09

» [CR] The Bazooka Cat
por Tedi Ripper Dom 16 Jul 2017, 23:01

» Como melhorar um protótipo(Design)
por lolandoplayer Dom 16 Jul 2017, 22:56

» Diminuir velocidade ao arrastar objeto
por LwysF Dom 16 Jul 2017, 17:33

Quem está conectado
15 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 15 Visitantes

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 324 em Ter 05 Out 2010, 13:36
Estatísticas
Temos 12700 usuários registrados
O último usuário registrado atende pelo nome de Eduardo Gomes

Os nossos membros postaram um total de 220919 mensagens em 30412 assuntos

Controle de hits por ataque

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

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)
avatar
D'Tois

Data de inscrição : 05/01/2011
Número de Mensagens : 22
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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....
avatar
itallo

Ranking : Sem avaliações
Data de inscrição : 26/08/2009
Número de Mensagens : 969
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Prêmios
   : 1
   :
   :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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.
avatar
D'Tois

Data de inscrição : 05/01/2011
Número de Mensagens : 22
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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.
avatar
itallo

Ranking : Sem avaliações
Data de inscrição : 26/08/2009
Número de Mensagens : 969
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Prêmios
   : 1
   :
   :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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.
avatar
D'Tois

Data de inscrição : 05/01/2011
Número de Mensagens : 22
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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
avatar
itallo

Ranking : Sem avaliações
Data de inscrição : 26/08/2009
Número de Mensagens : 969
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Prêmios
   : 1
   :
   :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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?
avatar
D'Tois

Data de inscrição : 05/01/2011
Número de Mensagens : 22
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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
}

avatar
itallo

Ranking : Sem avaliações
Data de inscrição : 26/08/2009
Número de Mensagens : 969
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Prêmios
   : 1
   :
   :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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.
avatar
D'Tois

Data de inscrição : 05/01/2011
Número de Mensagens : 22
Insígnias de JAM :

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ver perfil do usuário

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