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
Tempo de espera entre ações
+4
Thyago
saim
Ritton
GustavoLC
8 participantes
Página 1 de 1
Tempo de espera entre ações
Pessoal, estive estudando as funções do GML, porém aparentemente nenhuma cobre a espera de um tempo determinado até uma ação ser concluída.
Por exemplo, quero que um inimigo atire. A ação seria mais ou menos assim;
-Modifica o sprite do inimigo atirando.
-Espera um momento (2 segundos, por exemplo)
-Modifica o sprite do inimigo parado.
Existe alguma função que espere 2 segundos para depois continuar interpretando o código? Ou a única forma é através dos alarmes que, ao meu ver confunde muito na hora de escrever o código??
A função sleep() não é interessante, pq ela pára TUDO na tela e não é isso que eu quero. Eu queria uma função independente de alarmes, que simplesmente aguardasse 2 segundos até partir para a próxima linha. Alguém conhece a função para isso ou tem algum script pronto?? Desde já agradeço.
[Editado por saim]: Movido para a seção adequada
Por exemplo, quero que um inimigo atire. A ação seria mais ou menos assim;
-Modifica o sprite do inimigo atirando.
-Espera um momento (2 segundos, por exemplo)
-Modifica o sprite do inimigo parado.
Existe alguma função que espere 2 segundos para depois continuar interpretando o código? Ou a única forma é através dos alarmes que, ao meu ver confunde muito na hora de escrever o código??
A função sleep() não é interessante, pq ela pára TUDO na tela e não é isso que eu quero. Eu queria uma função independente de alarmes, que simplesmente aguardasse 2 segundos até partir para a próxima linha. Alguém conhece a função para isso ou tem algum script pronto?? Desde já agradeço.
[Editado por saim]: Movido para a seção adequada
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Acredito que a melhor maneira é os alarms que parecem ser complicado, mas acredite, são bem fáceis. Para se trabalhar com eles, primeiro crie um evento Alarm0 e defina o tempo de espera e depois no evento de ação, supomos que o clique do mouse, você insere esse tempo no código, marcando a transição entre as duas.
Desculpe pela explicação ruim é que estou ocupado e quase sem tempo de ver o que está acontecendo no fórum.
Até mais!
Desculpe pela explicação ruim é que estou ocupado e quase sem tempo de ver o que está acontecendo no fórum.
Até mais!
Ritton- Games Ranking :
Notas recebidas : C
Data de inscrição : 07/06/2011
Reputação : 2
Número de Mensagens : 673
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Os alarms são scripts prontos.
Basicamente, o que acontece é o seguinte: você está colocando uma ação no step, mas você não quer que essa ação ocorra a todo e qualquer step. Você coloca uma CONDIÇÃO. If isso, then aquilo.
Enão você quer que a ação ocorra um TEMPO depois de uma outra. Você altera uma variável, como "tempoCorrendo" e joga uma outra, "countDown" pra, por exemplo, 20. Sempre que "tempoCorrendo" for true, "countDown" será subtraído de 1.
Quando "countDown" for igual a zero, aquela ação pode ocorrer. Quando "countDown" for igual a -1, "tempoCorrendo" passa a ser false.
Basicamente, é assim que os ALARMS funcionam, só que o game maker te traz tudo prontinho e embalado, só colocar no microondas e servir.
Basicamente, o que acontece é o seguinte: você está colocando uma ação no step, mas você não quer que essa ação ocorra a todo e qualquer step. Você coloca uma CONDIÇÃO. If isso, then aquilo.
Enão você quer que a ação ocorra um TEMPO depois de uma outra. Você altera uma variável, como "tempoCorrendo" e joga uma outra, "countDown" pra, por exemplo, 20. Sempre que "tempoCorrendo" for true, "countDown" será subtraído de 1.
Quando "countDown" for igual a zero, aquela ação pode ocorrer. Quando "countDown" for igual a -1, "tempoCorrendo" passa a ser false.
Basicamente, é assim que os ALARMS funcionam, só que o game maker te traz tudo prontinho e embalado, só colocar no microondas e servir.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Tempo de espera entre ações
Pessoal, eu entendo a utilização dos alarmes, mas fica complicado quando você quer ações mais complexas, como um inimigo lançar um projétil, aguardar ele voltar e enquanto isso ficar esperando.
Seria muito mais fácil se houvesse por exemplo uma função tipo wait(300), que esperaria 300 passos para continuar...
Seria muito mais fácil se houvesse por exemplo uma função tipo wait(300), que esperaria 300 passos para continuar...
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
.Na verdade alarms são estremamentes simples,mas indo ao pé da letra o
exemplo que você fez é muito simples.
ex:
create:
exemplo que você fez é muito simples.
ex:
create:
- Código:
wait=0;
- Código:
if(wait>0)
{
wait-=1;
}
if (wait=0)
{
executa seu codigo;
wait=300;
}
Thyago- Games Ranking :
Notas recebidas : D+B+B+C+A
Data de inscrição : 24/08/2009
Reputação : 31
Número de Mensagens : 1101
Prêmios :
x 0 x 0 x 0
x 1 x 1 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Thyago escreveu: .Na verdade alarms são estremamentes simples,mas indo ao pé da letra o
exemplo que você fez é muito simples.
ex:
create:em strep:
- Código:
wait=0;
.Só um exemplo do que você disse que seria facil,se "tivesse"como fazer.
- Código:
if(wait>0)
{
wait-=1;
}
if (wait=0)
{
executa seu codigo;
wait=300;
}
Não, cara. wait() no step? Eu disse isso considerando que fosse uma função. Não tem jeito, já que deveria ser usado em diversos eventos de diversos objetos. É uma pena que não tenha no game maker. Estou adorando este programa, mas está é uma primeira falha. Até no RPG Maker que é bem mais simples tem...
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
GustavoLC escreveu:Pessoal, eu entendo a utilização dos alarmes, mas fica complicado quando você quer ações mais complexas, como um inimigo lançar um projétil, aguardar ele voltar e enquanto isso ficar esperando.
Seria muito mais fácil se houvesse por exemplo uma função tipo wait(300), que esperaria 300 passos para continuar...
Isso é muito fácil!
Além do mais, acho que tem as funções Trigger que se eu não me engano são mais ou menos como os Alarms...
Mas não há outra maneira mais facil de fazer o que tu quer fazer sem ser com Alarms, por exemplo:
Além do mais, acho que tem as funções Trigger que se eu não me engano são mais ou menos como os Alarms...
Mas não há outra maneira mais facil de fazer o que tu quer fazer sem ser com Alarms, por exemplo:
GustavoLC escreveu:...mas fica complicado quando você quer ações mais complexas, como um inimigo lançar um projétil, aguardar ele voltar e enquanto isso ficar esperando...
Isso não é complexo, pelo menos para mim que ja tenho uma certa experiencia, estude bem os Alarms e vai ver como é super fácil utiliza-los da forma que você quer!
gabrielsch- Games Ranking :
Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 1 x 0 x 0
Re: Tempo de espera entre ações
https://gmbr.forumeiros.com/t5238-como-fazer-quando-o-player-atirar-esperar-2sec-para-atirar-denovo?highlight=2sec
Neste Tuto a amigo ensina o inimigo atirar a cada dois segundos! Ou seja Ele espera 2 segundos para executar a ação! Você tbm pode usar timeline que também tem uma função ótima para executar ações a cada certo tempo!! Flws
Neste Tuto a amigo ensina o inimigo atirar a cada dois segundos! Ou seja Ele espera 2 segundos para executar a ação! Você tbm pode usar timeline que também tem uma função ótima para executar ações a cada certo tempo!! Flws
Re: Tempo de espera entre ações
Espera um minuto... Você quer esperar o projétil voltar ou o tempo passar? Só existe uma forma de esperar o tempo passar: não fazendo nada durante esse tempo.GustavoLC escreveu:Pessoal, eu entendo a utilização dos alarmes, mas fica complicado quando você quer ações mais complexas, como um inimigo lançar um projétil, aguardar ele voltar e enquanto isso ficar esperando.
Seria muito mais fácil se houvesse por exemplo uma função tipo wait(300), que esperaria 300 passos para continuar...
Pra não fazer nada, use uma variável e diga: se a variável for true, faça coisas, else, não faça nada.
Adivinha qual é a forma mais fácil de transformar uma variável de false pra true depois de um tempo determinado!
Não existe essa função "wait(tempo)" pra objetos , então você terá que usar essa estrutura de condicional.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Tempo de espera entre ações
É oseguinte, pessoal. Estou fazendo um remake de megaman e na criação de um dos bosses, me deparei com essa tal complexidade que cito. O resultado que eu gostaria eu consegui usando os alarmes, porém me pareceu gratuitamente complexo usar um alarme apenas para marcar tempo (ficar pulando de um evento pro outro). Sobre os triggers e timeline, confesso que nunca usei e nem sei direito como usar, mas vou estudar. Assim que meu jogo estiver mais organizado, eu posto aqui pra vcs darem uma olhada. Abraços a todos.
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Só uma dica, caso você esteja fazendo ele em códigos:
No create do boss:
No evento atirar o boomerang.
Na primeira linha do step do boss coloca um "if" assim:
Riscos:
1º veja se as funções de gravidade ou outras de controle do jogo não estejam no meio do código pois elas vão ficar paradas ate boomerang ser "0".
2º caso as funções de movimento do boss estejam em eventos separados eles irão funcionar, tem que colocar o "if" la também mas não coloque a linha final inteira só esse "}"
Esse também é um jeito de parar um personagem apenas, deixando o resto do jogo rodar normalmente.
Caso seja para o player, pode usar, mas corre-se o risco de alguma função parar de funcionar.
Se você fez todos os códigos vai conseguir arruma tudo.
No create do boss:
- Código:
Boomerang=0 //só vai ser + quando ele jogar o boomerang
No evento atirar o boomerang.
- Código:
boomerang=1
Na primeira linha do step do boss coloca um "if" assim:
- Código:
if boomerang=0 {
//deixa todos os códigos, não mexa em nada do que já tem ok?
//..........
//..........
//..........
//cria mais uma linha no final e coloca assim
}
else {
if boomerang=300 {boomerang=0}
else
{
boomerang+=1}}
Riscos:
1º veja se as funções de gravidade ou outras de controle do jogo não estejam no meio do código pois elas vão ficar paradas ate boomerang ser "0".
2º caso as funções de movimento do boss estejam em eventos separados eles irão funcionar, tem que colocar o "if" la também mas não coloque a linha final inteira só esse "}"
Esse também é um jeito de parar um personagem apenas, deixando o resto do jogo rodar normalmente.
Caso seja para o player, pode usar, mas corre-se o risco de alguma função parar de funcionar.
Se você fez todos os códigos vai conseguir arruma tudo.
CRP-Max- Games Ranking :
Notas recebidas : C
Data de inscrição : 28/10/2008
Reputação : 29
Número de Mensagens : 822
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Crp, não tem como eu testar agora, mas acho que isso travaria o jogo. Digo isso porque ontem desenvolvi uma ideia que na hora de programar não deu certo. A ideia era o seguinte: criar um script chamado scr_wait().
No Evento Create do objeto, eu declaro a variável v_time como zero e a variável v_ontimer=0(timer desligado)
No evento End Step (pq no Step já tinha outras coisas), eu coloquei um if do tipo:
Se v_ontimer=1{v_time+=1} Se o temporizador estiver ligado, a cada fim de passo, a variável v_time é incrementada em 1.
E finalmente no script, havia o código:
v_time=0;
v_ontimer=1; //para ligar o temporizador
while v_time!=300 {} //não faz nada, mas pára tudo enquanto não se passar os 300 endsteps para incrementar a vairável v_time...
Não sei se ficou claro, não estou no meu computador, mas o importante é que parou TUDO, como se eu tivesse utilizado a função sleep(300)... Não foi dessa vez.
Sobre a utilização dos alarmes, volto a dizer que elas resolvem os problemas, mas no final das contas deixa a programação um pouco confusa. Veja só, no meu boss, ele possui 4 ações distintas: usei quase todos os alarmes para que fossem feitas de forma eficiente, sendo que alguns eram meramente para mudar o sprite e velocidade de animação...
Acaba que fica complicado, pois o alarme 1, 2 e 8 estão linkados, depois o 3,4,10...mas só isso mesmo.
No Evento Create do objeto, eu declaro a variável v_time como zero e a variável v_ontimer=0(timer desligado)
No evento End Step (pq no Step já tinha outras coisas), eu coloquei um if do tipo:
Se v_ontimer=1{v_time+=1} Se o temporizador estiver ligado, a cada fim de passo, a variável v_time é incrementada em 1.
E finalmente no script, havia o código:
v_time=0;
v_ontimer=1; //para ligar o temporizador
while v_time!=300 {} //não faz nada, mas pára tudo enquanto não se passar os 300 endsteps para incrementar a vairável v_time...
Não sei se ficou claro, não estou no meu computador, mas o importante é que parou TUDO, como se eu tivesse utilizado a função sleep(300)... Não foi dessa vez.
Sobre a utilização dos alarmes, volto a dizer que elas resolvem os problemas, mas no final das contas deixa a programação um pouco confusa. Veja só, no meu boss, ele possui 4 ações distintas: usei quase todos os alarmes para que fossem feitas de forma eficiente, sendo que alguns eram meramente para mudar o sprite e velocidade de animação...
Acaba que fica complicado, pois o alarme 1, 2 e 8 estão linkados, depois o 3,4,10...mas só isso mesmo.
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Vou te explicar porque travou. Você usou um while infinito.
v_time era zero. Enquanto v_time fosse diferente de 300, o computador seguiria executando aquela ação (nenhuma), até que v_time fosse 300. Isso nunca iria acontecer, então você ficou travado naquele step.
Não foi nada parecido com a função sleep, que segura o jogo (só o jogo, não o computador inteiro) por um tempo DETERMINADO.
O que você QUASE fez foi um alarm não-built-in, ou seja, você chegou perto de elaborar seu próprio alarm. É uma alternativa, pro caso de acabarem os alarms.
Agora, um erro dessa sua lógica foi achar que ao colocar uma ação nula sob determinada condição o objeto cessaria de executar as outras ações. Faça o teste: repita sua lógica, mas troque o while por um if. Você nem notará que o if está lá, porque ele não faz nada.
Não estou escrevendo pra criticar. É que esse raciocínio pode ser fatal e se você não entender onde errou, pode ter problemas bem sérios ao tentar códigos mais complexos.
v_time era zero. Enquanto v_time fosse diferente de 300, o computador seguiria executando aquela ação (nenhuma), até que v_time fosse 300. Isso nunca iria acontecer, então você ficou travado naquele step.
Não foi nada parecido com a função sleep, que segura o jogo (só o jogo, não o computador inteiro) por um tempo DETERMINADO.
O que você QUASE fez foi um alarm não-built-in, ou seja, você chegou perto de elaborar seu próprio alarm. É uma alternativa, pro caso de acabarem os alarms.
Agora, um erro dessa sua lógica foi achar que ao colocar uma ação nula sob determinada condição o objeto cessaria de executar as outras ações. Faça o teste: repita sua lógica, mas troque o while por um if. Você nem notará que o if está lá, porque ele não faz nada.
Não estou escrevendo pra criticar. É que esse raciocínio pode ser fatal e se você não entender onde errou, pode ter problemas bem sérios ao tentar códigos mais complexos.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Tempo de espera entre ações
Só pra complementar a diferença do while e do if:
while, ele é um loop que para o todo o programa enquanto seu valor for verdadeiro, parecendo um "sleep".
if, caso o seu valor seja falso, ele continua executando todos os comandos menos os que estão dentro dos "{}".
Essa é a diferença entre meu código e o seu, caso o meu esteja errado o único que vai parar é o objeto que estiver usando o if, os outros vão continuar sendo executados.
while, ele é um loop que para o todo o programa enquanto seu valor for verdadeiro, parecendo um "sleep".
if, caso o seu valor seja falso, ele continua executando todos os comandos menos os que estão dentro dos "{}".
Essa é a diferença entre meu código e o seu, caso o meu esteja errado o único que vai parar é o objeto que estiver usando o if, os outros vão continuar sendo executados.
CRP-Max- Games Ranking :
Notas recebidas : C
Data de inscrição : 28/10/2008
Reputação : 29
Número de Mensagens : 822
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Saim, perceba que no evento End Step, a variável v_time é incrementada em 1. O meu raciocínio foi que enquanto o while infinito estivesse acontecendo, a variável fosse continuamente incrementada, até passar 300 passos. Nesse momento, ela interromperia o loop, nos exatos 300 passos, conforme eu havia planejado.
CRP-Max, se for assim, vou testar o raciocínio usando if. Não sabia dessa particularidade do while (que ele pára tudo o que está acontecendo)...
CRP-Max, se for assim, vou testar o raciocínio usando if. Não sabia dessa particularidade do while (que ele pára tudo o que está acontecendo)...
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Procurei nos fóruns estrangeiros e o pessoal sempre diz a mesma coisa, que o uso de alarmes não é complicado. Assim sendo, vou tentar ilustrar a facilidade que seria uma função wait().
Pra começar, a função funcionaria da seguinte forma:
Por exemplo, Wait(300): o evento pausará por 300 passos antes de realizar a próxima ação. Entendido? Agora o exemplo:
Eu quero um inimigo que tenha 2 ataques e o primeiro ataque será feito após 300 passos de sua criação. Findado este tempo, será escolhido aleatoriamente o ataque. Contudo, o ataque do primeiro projétil deve acionar uma animação que dura 24 steps e o segundo ataque, uma animação que dura 12 steps.
Como isso é feito atualmente no GM, segue abaixo:
=============
Ev Create:
image_speed=0;
alarm[0]=300;
=============
Alarm0
action=irandom_range(1,2)
if action=1
{
sprite_index= spr_lançando_projetil;
image_speed=1;
alarm[1]=24;
}
if action=2
{
sprite_index= spr_lançando projetil2;
image_speed=1;
alarm[2]=12;
============
Alarm1
instance_create(10,10,obj_projetil);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[0]=300;
==================
Alarm2
instance_create(10,10,obj_projetil2);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[0]=300;
===========
Percebam que a função do alarm0 cuida apenas da escolha do projétil e, dependendo do projétil, aciona alarmes diferentes para executar. No total, são utilizados 3 alarmes para tudo, onde para cada ação, é necessário a utilização de 1 alarme. Assim, se o inimigo tivesse 5 ataques, usaria 6 alarmes.
Agora, como ficaria o mesmo código se houvesse algo similar à função wait:
========
Ev Create:
image_speed=0;
alarm[0]=300;
========
Alarm0:
action=irandom_range(1,2)
if action=1
{
sprite_index= spr_lançando_projetil;
image_speed=1;
wait(24);
instance_create(10,10,obj_projetil);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[1]=300;
}
if action=2
{
sprite_index= spr_lançando projetil2;
image_speed=1;
wait(12);
instance_create(10,10,obj_projetil2);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[1]=300;
==============
Alarm1:
alarm[0]=300;
==============
Os dois ataques são definidos diretamente no Alarm0, sendo que o Alarm1 funciona exclusivamente como carregador do gatilho do Alarm0. Desta forma, são usados apenas 2 alarmes. E se o inimigo tivesse 5 golpes similares ao lançamento de projétil? Continuaríamos usando 2 alarmes, pois toda a ação seria feita dentro do Alarm0, independente se haveria animação ou não.
Antes que alguém diga que 5 ataques para um mesmo inimigo é exagerado ou que mesmo assim, há 12 alarmes para serem usados, é preciso dizer que o exemplo que dei é bem simples e foi utilizado apenas para ilustrar o meu raciocínio. Na prática, outros alarmes seriam utilizados para fazer outras ações como verificar pontos de saúde, recarregar variáveis,etc.
A função wait(), deixaria a escrita do código bem mais fácil de ser estudada e interpretada. não concordam?
Pra começar, a função funcionaria da seguinte forma:
Por exemplo, Wait(300): o evento pausará por 300 passos antes de realizar a próxima ação. Entendido? Agora o exemplo:
Eu quero um inimigo que tenha 2 ataques e o primeiro ataque será feito após 300 passos de sua criação. Findado este tempo, será escolhido aleatoriamente o ataque. Contudo, o ataque do primeiro projétil deve acionar uma animação que dura 24 steps e o segundo ataque, uma animação que dura 12 steps.
Como isso é feito atualmente no GM, segue abaixo:
=============
Ev Create:
image_speed=0;
alarm[0]=300;
=============
Alarm0
action=irandom_range(1,2)
if action=1
{
sprite_index= spr_lançando_projetil;
image_speed=1;
alarm[1]=24;
}
if action=2
{
sprite_index= spr_lançando projetil2;
image_speed=1;
alarm[2]=12;
============
Alarm1
instance_create(10,10,obj_projetil);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[0]=300;
==================
Alarm2
instance_create(10,10,obj_projetil2);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[0]=300;
===========
Percebam que a função do alarm0 cuida apenas da escolha do projétil e, dependendo do projétil, aciona alarmes diferentes para executar. No total, são utilizados 3 alarmes para tudo, onde para cada ação, é necessário a utilização de 1 alarme. Assim, se o inimigo tivesse 5 ataques, usaria 6 alarmes.
Agora, como ficaria o mesmo código se houvesse algo similar à função wait:
========
Ev Create:
image_speed=0;
alarm[0]=300;
========
Alarm0:
action=irandom_range(1,2)
if action=1
{
sprite_index= spr_lançando_projetil;
image_speed=1;
wait(24);
instance_create(10,10,obj_projetil);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[1]=300;
}
if action=2
{
sprite_index= spr_lançando projetil2;
image_speed=1;
wait(12);
instance_create(10,10,obj_projetil2);
sprite_index=spr_inimigo_parado;
image_speed=0;
alarm[1]=300;
==============
Alarm1:
alarm[0]=300;
==============
Os dois ataques são definidos diretamente no Alarm0, sendo que o Alarm1 funciona exclusivamente como carregador do gatilho do Alarm0. Desta forma, são usados apenas 2 alarmes. E se o inimigo tivesse 5 golpes similares ao lançamento de projétil? Continuaríamos usando 2 alarmes, pois toda a ação seria feita dentro do Alarm0, independente se haveria animação ou não.
Antes que alguém diga que 5 ataques para um mesmo inimigo é exagerado ou que mesmo assim, há 12 alarmes para serem usados, é preciso dizer que o exemplo que dei é bem simples e foi utilizado apenas para ilustrar o meu raciocínio. Na prática, outros alarmes seriam utilizados para fazer outras ações como verificar pontos de saúde, recarregar variáveis,etc.
A função wait(), deixaria a escrita do código bem mais fácil de ser estudada e interpretada. não concordam?
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
O que você poderia fazer é um script chamado wait (claro), mas o que ele faria seria criar um objeto que faça tais ações. Vamos ver, como se fosse:
Até mais!
- Código:
//wait(steps,acao)
var obj;
obj=object_add()
object_event_add(obj,ev_create,0,"alarm[0]="+string(argument0))
object_event_add(obj,ev_alarm,0,argument1+"
instance_destroy()
object_delete(obj)")
Até mais!
Re: Tempo de espera entre ações
luiz, também pensei em algo do tipo, criar um objeto, mas mesmo assim seria complicado. É uma pena não ter a função wait ou algo similar a ela, facilitaria muitooo!
GustavoLC- Data de inscrição : 20/11/2011
Reputação : 1
Número de Mensagens : 39
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Tempo de espera entre ações
Você só quer que ele espere pelo tempo da animação? Ora, já ouviu falar no evento animation_end? Está lá na guia "other". Coloque, nesse evento:
Edit:
Aí, o computador vai jogando valores aleatórios entre 0 e 2. Quando o valor 1 EXATO for lançado, a condição será satisfeita e o programa seguirá executando as linhas seguintes. Só que vai levar muito tempo pro random retornar exatamente 1. "Muito tempo" pode ser 5 minutos ou uma semana.
Existem outros loops passivos de trancar seu computador. Exemplos:
- Código:
switch(action){
case 1: //faz o que você colocou no alarm1; break;
case 2: //faz o que você colocou no alarm2; break;
//etc
}
- Código:
instance_create(x, y, obj_projetol[action];
alarm[0] = 300;
- Código:
action = irandom_range(1, número de ações);
sprite_index= spr_lançando projetil[action]
Edit:
É aí que está um erro de lógica que eu levei semanas pra entender, quando comecei a programar. O while INTEIRO acontece num step só. Aliás, não é num step, é naquele conjunto de linhas do evento. Veja esse exmplo:Saim, perceba que no evento End Step, a variável v_time é incrementada em 1. O meu raciocínio foi que enquanto o while infinito estivesse acontecendo, a variável fosse continuamente incrementada, até passar 300 passos. Nesse momento, ela interromperia o loop, nos exatos 300 passos, conforme eu havia planejado.
- Código:
i=0;
while(i!=1){ //enquanto i não for 1
i=random(2)
}
Aí, o computador vai jogando valores aleatórios entre 0 e 2. Quando o valor 1 EXATO for lançado, a condição será satisfeita e o programa seguirá executando as linhas seguintes. Só que vai levar muito tempo pro random retornar exatamente 1. "Muito tempo" pode ser 5 minutos ou uma semana.
Existem outros loops passivos de trancar seu computador. Exemplos:
- Código:
for(i=0;i<5;i+=1){
i-=1
}
- Código:
do{i=0}until(i=1)
- Código:
for(i=0;i<5;i+=1){
if i>=5
continue
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Tópicos semelhantes
» Duvida com tempo entre açoes
» [Resolvido]Como fazer tipo se agente segurar up por muito tempo ele pula alto, se apertar por pouco tempo, pula baixo ?
» Pergunta Boba-Tempo de espera para atirar
» Intervalo de tempo entre tiros
» como eu crio muniçao,troca de armas e tempo entre cada tiro?
» [Resolvido]Como fazer tipo se agente segurar up por muito tempo ele pula alto, se apertar por pouco tempo, pula baixo ?
» Pergunta Boba-Tempo de espera para atirar
» Intervalo de tempo entre tiros
» como eu crio muniçao,troca de armas e tempo entre cada tiro?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos