Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Atacando sem parar
5 participantes
Página 1 de 1
Atacando sem parar
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.
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- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
Eu não sei como ta no seu jogo, mas nos meus eu uso mais ou menos isso, espero que te ajude.
No create
Na colisão dele com o player ou no ato de mudar a sprite para o ataque.
no alarm[0]
E finalmente no alarm[1]
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- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
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- Data de inscrição : 08/10/2014
Reputação : 27
Número de Mensagens : 236
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
No alarme cada segundo é equivalente a 30 steps. Aumente para 120 e veja oque acontece.
WellingtonBecker- Games Ranking :
Notas recebidas : D
Data de inscrição : 09/05/2013
Reputação : 105
Número de Mensagens : 824
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
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.
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- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
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.
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- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
Quando for postar código, clique nesse ícone.
Mais fácil de analisar.
Mais fácil de analisar.
Sewer Crawler- Data de inscrição : 08/10/2014
Reputação : 27
Número de Mensagens : 236
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
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)
Espera, Ne cada movimentação dele ele ataca?(obj_hit)
Wendryos- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
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.
vou te enviar o gmk por favor nao olhe pra bagunca de sprites.
jailson_dante- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
Ok Jailson.
Wendryos- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
http://www.4shared.com/rar/eaJ9YqD-ce/rpgteste01gmx.html
jailson_dante- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
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?
Mas já me adianta uma coisa, esse código ai é do personagem(player) ou do inimigo?
Wendryos- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
é do inimigo.
jailson_dante- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
No create
No Step
No alarm[0]
Coloca
No alarm[1]
Com isso ele só vai fazer o ataque se a variavel paralisado estiver false, oque ocorre a cada 25 steps.
- 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- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
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!
Obrigado a todos e boa noite!
jailson_dante- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
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- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Re: Atacando sem parar
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...
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- Games Ranking :
Notas recebidas : D
Data de inscrição : 29/03/2009
Reputação : 7
Número de Mensagens : 941
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
- Unity
- Java
- C#
- Javascript
- RPG Maker
- C ou C++
- Outros
Re: Atacando sem parar
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:
no step do inimigo (aquela linha que eu achava q estava errada):
e no alarm0 do inimigo:
e no alarm1 do inimigo:
Então por enquanto é isso pessoal, mais uma vez agradeço a todos. Tópico resolvido
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- Data de inscrição : 10/11/2014
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
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- Data de inscrição : 08/10/2014
Reputação : 27
Número de Mensagens : 236
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Atacando sem parar
Que bom Jailson que conseguimos te ajudar, se precisar é só postar sua duvida que tentaremos saná-las.
Wendryos- Games Ranking :
Notas recebidas : D
Data de inscrição : 21/04/2014
Reputação : 12
Número de Mensagens : 194
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 1
Tópicos semelhantes
» [Resolvido]Parar um sound_loop() sem parar os sons de mesmo nome.
» Dúvida em sprite atacando
» Parar loop.
» AJUDA aki q o diabo tá atacando meu jogo XD
» I.A inimigo seguir player virando na direção dele e atacando ao se aproximar
» Dúvida em sprite atacando
» Parar loop.
» AJUDA aki q o diabo tá atacando meu jogo XD
» I.A inimigo seguir player virando na direção dele e atacando ao se aproximar
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos