Página 1 de 1
Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano
Enviado: Dom Dez 30, 2018 12:37 am
por AragaSam
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.
Re: Ajuda com delay de ataque e com "empurrão" ao levar dano
Enviado: Dom Dez 30, 2018 12:56 am
por rafarp23
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:
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:
-----------------------------------------------------------------------------------
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:
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!
Re: Ajuda com delay de ataque e com "empurrão" ao levar dano
Enviado: Seg Dez 31, 2018 4:54 pm
por AragaSam
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
Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano
Enviado: Qua Jan 02, 2019 4:23 pm
por rafarp23
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.
Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano
Enviado: Sáb Jan 05, 2019 4:03 pm
por AragaSam
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;
}
Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano
Enviado: Dom Jan 06, 2019 12:13 am
por rafarp23
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.
Re: Ajuda com pausa durante ataque e com inimigo ser empurrado ao levar dano
Enviado: Dom Jan 06, 2019 12:26 am
por AragaSam
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
}
}