Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
AragaSam
Artista
Artista
Reações: 0
Mensagens: 18

Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano

Mensagem por AragaSam » Dom Dez 30, 2018 12:37 am

Olá, gostaria de esclarecer como eu poderia criar uma pausa quando o personagem ataca, sem que o player consiga andar enquanto ataca e só consiga andar de novo quando o ataque acabe, além disso outra dúvida é como fazer o inimigo ser empurrado pra trás levemente quando levar dano e piscar vermelho (como no sistema de ataque do zelda por exemplo)
Uso o GMS2 versão de teste, o jogo é top-down e imagino algo como zelda e hyper light drifter em relação a jogabilidade.
Desde já agradeço.
Editado pela última vez por AragaSam em Ter Jan 01, 2019 8:25 pm, em um total de 1 vez.
42

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Ajuda com delay de ataque e com "empurrão" ao levar dano

Mensagem por rafarp23 » Dom Dez 30, 2018 12:56 am

AragaSam escreveu:Olá, gostaria de esclarecer como eu poderia fazer um "delay" quando o personagem ataca (pois se apertar o botão varias vezes ele ataca seguidamente), como o personagem ficando um tempo parado após atacar, e também, como eu poderia fazer pra quando um personagem ou inimigo levar dano, ser empurrado pra trás e piscar. Desde já agradeço.
Delay vc fla um tempo de ataque né? Se for segue o código abaixo!

No create do obj_player você vai colocar:

Código: Selecionar todos

attackTime = 10;
attackAble = false;
No step:

Código: Selecionar todos

if attackAble = true{
attackTime -= 0.15;
}

if(keyboard_check_pressed(vk_space) && attackAble == false){
attackAble = true;
}
Depois disso, no destroy do objeto de ataque você coloca isso:

Código: Selecionar todos

obj_player.attackAble = false;
-----------------------------------------------------------------------------------

Agorá sobre o empurrar e piscar!!

Para que o inimigo sejá empurrado ao ser atacado, coloque um evento colissão no inimigo do ataque e adicione o código:

Código: Selecionar todos

//Empurra o jogador 10 quadras ao x e 10 ao y.
x += lengthdir_x(10,direction);
y += lengthdir_y(10,direction);
Agora para que ele pisque faça o seguinte, no mesmo evento colissão no inimigo adicione:

Código: Selecionar todos

alarm[0] = 5; // 5 é o tempo de cada em cada pisque
No alarm0 coloque:

Código: Selecionar todos

repeat(5) // 5 é o tanto de vez q ira repetir o pisque
if self.visible == true{
self.visible = false
}else if self.visible == false{
self.visible = true;
}
Bom é isso, espero que te ajude!
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
AragaSam
Artista
Artista
Reações: 0
Mensagens: 18

Re: Ajuda com delay de ataque e com "empurrão" ao levar dano

Mensagem por AragaSam » Seg Dez 31, 2018 4:54 pm

Na parte que foi dito "destroy do objeto de ataque", o objeto de ataque seria flechas, espada e esse tipo de coisa? Além disso, no momento estou dando prioridade pro sistema de atirar flechas pois percebi ser mais simples de programar, com a espada eu não sei bem se é mais facil criar um objeto da espada em si ou desenhar a espada no sprite e criar um objeto em frent ao player que represente o impacto da espada, ou posso proceder de ambas as formas? Qual a mais simples?
ahh, e o delay que me refiro é ele ficar parado um tempo enquanto ataca (por exemplo pra atirar flecha, ele ficar parado, executar a animação de puxar o arco e depois atirar a flecha, pois ela sai instantaneamente), escrevi com sono a pergunta e deve ter ficado difícil de entender

Obrigado pela ajuda
Editado pela última vez por AragaSam em Seg Dez 31, 2018 5:48 pm, em um total de 1 vez.
42

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano

Mensagem por rafarp23 » Qua Jan 02, 2019 4:23 pm

Fica mais viavel vc fazer um objeto para o ataque.

Sobre o delay, use alarms para que ele possa ter a animação de puxar o arco e dps disso use outro alarm para quando estiver no numéro X da animação.
Ex: no step, botao de ataque coloque alarm[0] = 10;

no alarm[0]:

Código: Selecionar todos

image_index = 0;
image_speed = 0.7;
if image_index >= 5{ //5 quantidade de frames da animação
alarm[1] = 10;
}
e em alarm[1] você coloca para que o objeto de ataque saia, como no seu caso a flecha.
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
AragaSam
Artista
Artista
Reações: 0
Mensagens: 18

Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano

Mensagem por AragaSam » Sáb Jan 05, 2019 4:03 pm

Seu código me deu uma luz, só falta criar o objeto de tiro e mudar para o sprite parado quando acabar de atirar, creio que o obj_laser não esta sendo criado pois o alarme [1] não esta sendo ativado

edit: poderia me explicar o cógido image_index? pesquisei na net mas não entendi muito bem

step:

se tecla K for pressionada e tiver balas
se o player estivar andando ou parado (para caso ele esteja usando a espada futuramente)
ativar alarme

if keyboard_check_pressed(ord("K")) and global.laser>0 {
   if sprite_index = spr_player_movendo_cima or sprite_index = spr_player_parado_cima or sprite_index = spr_player_movendo_baixo or sprite_index = spr_player_parado_baixo or sprite_index = spr_player_movendo_direita or sprite_index = spr_player_parado_direita {
   alarm [0] = 30*0.1;
 }
}

parar o player quando atira

if sprite_index = spr_player_atirando_direita {
if parado != true {
parado = true
}
}

///
alarm [0]:

definir o sprite de tiro de acordo com a direção do player
quando o sprite for o sprite que o player atira
ativar alarme

if sprite_index = spr_player_movendo_direita or spr_player_parado_direita {
 sprite_index = spr_player_atirando_direita {
 if image_index >= 5 {
     alarm [1] = 30*0.1
 }
  }
}

///
alarm [1]:

retira uma bala e cria o obj_laser

global.balas -=1

if sprite_index = spr_player_atirando_direita {
   with ( instance_create_layer(x,y-16, "Instances", obj_laser)) {
         motion_set (0, 7);
         sprite_index = spr_laser_direita;
}
42

Avatar do usuário
rafarp23
Membro
Membro
Reações: 0
Mensagens: 45
Localização: São José do Rio Preto, SP

Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano

Mensagem por rafarp23 » Dom Jan 06, 2019 12:13 am

O image_index é o numero dos frames que há na sprite, sempre começa do 0 e segue adiante, como a animação do player andando, normalmente é 4 frames, então o image_index é responsavel por cada um deles.
]-- [RagnumWorld] --
Em breve!!!

Avatar do usuário
AragaSam
Artista
Artista
Reações: 0
Mensagens: 18

Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano

Mensagem por AragaSam » Dom Jan 06, 2019 12:26 am

Entendi, no caso como minha animação tem 12 frames, e o tiro sai no frame 6, teria que colocar como image_index = 5 (contando o inicial 0)
Fiz isso, mas o objeto de tiro não é criado e até agora não achei erros no código pra que isso acontecesse.
No momento preciso resolver os seguintes problemas:

1. o tiro não é criado;
2. sprite não para de repetir (após o tiro criar o sprite parado na direção correta);
3. não importa o sprite, sempre é desenhado o sprite do player atirando pra baixo (fiz como no código de cima no alarm [0] e defini como se ele esta pra direita criar o sprite atirando pra direita, e se ele esta pra baixo criar o sprite atirando pra baixo)
alarm [0] atual:

if sprite_index = spr_player_movendo_direita or spr_player_parado_direita {
sprite_index = spr_player_atirando_direita
image_index = 0;
image_speed = 1;
if image_index = 5 {
alarm [1] = 30*0.1
}
}

if sprite_index = spr_player_movendo_baixo or spr_player_parado_baixo {
sprite_index = spr_player_atirando_baixo
image_index = 0;
image_speed = 1;
if image_index = 5 {
alarm [1] = 30*0.1
}
}
42

Responder

Quem está online

Usuários navegando neste fórum: Google [Bot] e 5 visitantes