Atacando sem parar

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

Atacando sem parar

Mensagem por jailson_dante em Qui 11 Dez 2014, 19:43

Olá pessoal! Eu sou novo por aqui e não sou bom em GML e nem em Lógica, mas, to fazendo o impossível para aprender, então peço ajuda a todos. O jogo vai ser feito em TopDown e como na descrição diz, eu quero q o inimigo quando perto do player ataque de maneira pausada o meu código é esse:

no step do inimigo:

if (distance_to_object(ob_player)>15 and distance_to_object(ob_player)<150){
i_parado=false;
mp_potential_step(ob_player.x,ob_player.y,2,false);}
else{
i_parado=true;
speed=0;}
if (i_atacando=false and distance_to_object(ob_player)<=16){
image_index=0;
i_atacando=true;
alarm[0]=25}

no alarm0 do inimigo:

i_atacando=false;

como vocês podem ver eu uso um alarm mas, mesmo assim, quando o inimigo fica perto do player ele fica atacando sem parar, e só para quando o player se afasta dele.

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 19:56

Eu não sei como ta no seu jogo, mas nos meus eu uso mais ou menos isso, espero que te ajude.


No create
Código:
paralisado = false

Na colisão dele com o player ou no ato de mudar a sprite para o ataque.

Código:
if paralisado = false
{
sprite_index = //Sua sprite de ataque ou do hp no players diminuindo Ex.: obj_player.hp -=5
alarm[0] = 5
}

no alarm[0]

Código:
paralisado = true;
alarm[1] = //Voce decide quando ele volta a atacar.

E finalmente no alarm[1]

Código:
paralisado = false;




Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Sewer Crawler em Qui 11 Dez 2014, 20:03

Não sei se entendi bem, mas no Evento Alarm vc pôs outro  
Código:
alarm[0]=25
?


Última edição por Sewer Crawler em Qui 11 Dez 2014, 20:15, editado 1 vez(es)

Sewer Crawler

Número de Mensagens : 236
Idade : 23
Data de inscrição : 08/10/2014
Reputação : 27
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por WellingtonBecker em Qui 11 Dez 2014, 20:08

No alarme cada segundo é equivalente a 30 steps. Aumente para 120 e veja oque acontece.

WellingtonBecker

Ranking : Nota D
Número de Mensagens : 820
Idade : 35
Data de inscrição : 09/05/2013
Notas recebidas : D
Reputação : 105
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 20:49

Não tem erro isso, é só fazer do jeito que mostrei a ele, colocar uma variável para controlar o ataque, e utilizar dois alarms para alterar essa variável.

O inimigo só vai atacar se a variável estiver em false, então ele controla o tempo Ex: A cada 30 steps ele ataca.

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por jailson_dante em Qui 11 Dez 2014, 21:32

Wendryos - Black Horn, obrigado por ajudar e desculpa pela falta de coerência. Eu tentei a adaptar o seu condigo no meu mas não deu certo. Vou mostrar o condigo completo:

no creat do inimigo ta assim:

i_parado=true; // controla a animação e o estado do inimigo se ele esta parado ou nao.
i_atacando=false; // controla a animaçao e o estado do inimigo se ele esta atacando ou nao,

no step eu coloquei assim: obs o step quase completo.

i_angulo=round(point_direction(x,y,ob_player.x,ob_player.y)/45)*45; // faz com que o inimigo fique olhando para o player

switch (i_angulo){ // controla a troca de sprites
case(0):
if (i_atacando=false){
if (i_parado=false){
sprite_index=sp_inim_a_d;}
else{
sprite_index=sp_inim_p_d;}}
else{
sprite_index=sp_inim_at_d;
instance_create(x+22,y,ob_hit);}
break;

case(45):
if (i_atacando=false){
if (i_parado=false){
sprite_index=sp_inim_dia_c_d_a;}
else{
sprite_index=sp_inim_dia_c_d_p;}}
else{
sprite_index=sp_inim_dia_c_d_at;
instance_create(x+22,y-16,ob_hit);}
break; // e assim vai até completar os 360º

if (distance_to_object(ob_player)>15 and distance_to_object(ob_player)<150){
i_parado=false;
mp_potential_step(ob_player.x,ob_player.y,2,false);}
else{
i_parado=true;
speed=0;}// quando o player estiver numa certa distancia entre 15 e 150 pixels o inimigo o segue se nao ele para de seguir.

if (i_atacando=false and distance_to_object(ob_player)<=16){
image_index=0;
i_atacando=true;
alarm[0]=25}// aqui é onde acho q ta o erro. Repetindo: "eu acho" kkk

e no alarm0:

i_atacando=false; // torna a variavel de true para false.

Por favor, mim ajudem ainda sou leigo.

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Sewer Crawler em Qui 11 Dez 2014, 22:37

Quando for postar código, clique nesse ícone.
Mais fácil de analisar.

Sewer Crawler

Número de Mensagens : 236
Idade : 23
Data de inscrição : 08/10/2014
Reputação : 27
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 22:40

Me envia seu GMK caso se usa o GM8, posso tentar resolver isso, porque ta meio confuso(pra min).



Espera, Ne cada movimentação dele ele ataca?(obj_hit)


Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por jailson_dante em Qui 11 Dez 2014, 22:51

esse "obj_hit" é uma caixa de colisâo q futuramente sera usada para tirar o hp do player.

vou te enviar o gmk por favor nao olhe pra bagunca de sprites.

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 22:56

Ok Jailson.

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por jailson_dante em Qui 11 Dez 2014, 22:58

http://www.4shared.com/rar/eaJ9YqD-ce/rpgteste01gmx.html

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 23:02

Eu não tenho o Studio, só o GM8, não vai dar de baixar.

Mas já me adianta uma coisa, esse código ai é do personagem(player) ou do inimigo?

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por jailson_dante em Qui 11 Dez 2014, 23:05

é do inimigo.

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 23:11

No create

Código:
paralisado = false

No Step

Código:
if (i_atacando=false and paralisado=false and distance_to_object(ob_player)<=16){
image_index=0;
i_atacando=true;
alarm[0]=25}

No alarm[0]

Coloca

Código:
paralisado=true
alarm[1] = 25


No alarm[1]

Código:
paralisado=false



Com isso ele só vai fazer o ataque se a variavel paralisado estiver false, oque ocorre a cada 25 steps.

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por jailson_dante em Qui 11 Dez 2014, 23:27

Wendryos - Black Horn o seu código pra mim esta muito certo, e agradeço muito pela sua paciencia, mas não sei porque não funcionou, não surtiu efeito nenhum (q estranho). vou dormir agora e deixo o tópico em aberto.
Obrigado a todos e boa noite!

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Qui 11 Dez 2014, 23:29

Creio que seja pelo seu código do step, mas preciso dormir também, amanha trabalho cedo, caso ninguém tiver resolvido, amanha eu volto a tentar te ajudar. Boa noite.

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por makgamer em Sex 12 Dez 2014, 01:40

Seu erro está no script de sprites para ângulo...
Basicamente você programou pra caso o player estiver perto a variável atacando ficar True, mas no script de sprites você disse que caso ela esteja True o sprite mude pro de ataque e crie o objeto de colisão do ataque, o problema é que durante os 25 steps que o alarme é chamado a variável fica positiva, o que faz com que o objeto fique sendo criado e o sprite fique repetindo até que o alarme negativa a variável e isso para, mas aí o step deixa positivo de novo e gera um ciclo vicioso. Estou com sono então amanhã explico como resolve isso...

makgamer

Ranking : Nota D
Número de Mensagens : 927
Idade : 18
Data de inscrição : 29/03/2009
Notas recebidas : D
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   : 1
   :

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por jailson_dante em Sex 12 Dez 2014, 10:37

Bom dia pessoal! Eu consegui resolver o problema com a ajuda de todos e principalmente do nosso amigo Wendryos - Black Horn. vou explicar como:

no creat do inimigo:

Código:
i_parado=true;
i_atacando=false;
pode_atacar=true;

no step do inimigo (aquela linha que eu achava q estava errada):

Código:
if (pode_atacar=true){
if (distance_to_object(ob_player)<=16){
image_index=0;
i_atacando=true;
pode_atacar=false;
alarm[0]=5;}} // coloquei esse valor no alarm0 pq se eu colocar um valor maior o inimigo executa mais de um ataque.

e no alarm0 do inimigo:

Código:
i_atacando=false;
alarm[1]=30;//Faz com que a variavel q controla o tempo da pausa entre ataques "pode_atacar" mude o seu valor a cada 30 steps.

e no alarm1 do inimigo:

Código:
pode_atacar=true;// onde o valor de false passa a ser true para da o comando do proximo ataque.

Então por enquanto é isso pessoal, mais uma vez agradeço a todos. Tópico resolvido

jailson_dante

Número de Mensagens : 11
Data de inscrição : 10/11/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Sewer Crawler em Sex 12 Dez 2014, 13:35

Tenho umas engines nos quais os inimigos agem parecido. Se quiser te passo os links.


Última edição por Sewer Crawler em Sex 12 Dez 2014, 13:54, editado 1 vez(es)

Sewer Crawler

Número de Mensagens : 236
Idade : 23
Data de inscrição : 08/10/2014
Reputação : 27
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Wendryos em Sex 12 Dez 2014, 13:38

Que bom Jailson que conseguimos te ajudar, se precisar é só postar sua duvida que tentaremos saná-las.

Wendryos

Ranking : Nota D
Número de Mensagens : 192
Data de inscrição : 21/04/2014
Notas recebidas : D
Reputação : 12
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Atacando sem parar

Mensagem por Conteúdo patrocinado Hoje à(s) 03:43


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