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
[DUVIDA] Loop Maquina de Estados.
5 participantes
Página 1 de 1
[DUVIDA] Loop Maquina de Estados.
Estou tendo alguns probleminhas com a maquina de estados, o problema é com um loop simples para usar em um Dash.
Ele funciona assim:
Ao apertar tecla de Dash, ele joga hspeed +12 ou -12 de acordo com a direção, e um loop faria o decremento ou incremento para retornar a zero. Mas o loop so funciona na primeira repetição e o hspeed fica como 11 e n retorna a zero.
Ele funciona assim:
Ao apertar tecla de Dash, ele joga hspeed +12 ou -12 de acordo com a direção, e um loop faria o decremento ou incremento para retornar a zero. Mas o loop so funciona na primeira repetição e o hspeed fica como 11 e n retorna a zero.
Última edição por †Des† em Dom 27 Nov 2011, 20:20, editado 1 vez(es)
†Des†- Data de inscrição : 21/12/2008
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DUVIDA] Loop Maquina de Estados.
Você pode tentar usar um choose() ,mas ao certo,não entendi sua dúvida,me explique melhor.....
Convidad- Convidado
Re: [DUVIDA] Loop Maquina de Estados.
já tentou usar friction em vez de fazer um loop?
Klior- Data de inscrição : 07/03/2010
Reputação : 13
Número de Mensagens : 426
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- C#
- Javascript
Re: [DUVIDA] Loop Maquina de Estados.
Provavelmente, esse decremento só está previsto pra um estado. Ao entrar em outro estado, o decremento não é mais levado em conta.
A máquina de estados é um dos motivos por que eu não uso mais as built-ins. Fica muito complicado prever tudo pra todos os estados. Programar cada um separadamente requer que você possa deixar de lado a preocupação com um monte de problemas advindos das built-ins.
Talvez você precise de mais um estado pra permanecer até a velocidade voltar a zero.
A máquina de estados é um dos motivos por que eu não uso mais as built-ins. Fica muito complicado prever tudo pra todos os estados. Programar cada um separadamente requer que você possa deixar de lado a preocupação com um monte de problemas advindos das built-ins.
Talvez você precise de mais um estado pra permanecer até a velocidade voltar a zero.
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: [DUVIDA] Loop Maquina de Estados.
Mas o loop so funciona na primeira repetição e o hspeed fica como 11 e n retorna a zero.
Se ele funciona certinho na primeira repetição, possivelmente pode ser porque há uma variável que está com o valor "certo" antes do primeiro loop, mas no segundo loop o valor dela já foi alterado. Será que é isso? Tenta conferir todas as variáveis que você tá usando e, se for isso, reatribuir o valor certo delas antes do loop.
De qualquer forma, um bom recurso também seria usar friction. Não dá pra saber como o seu jogo tá programado (e se dá pra usar friction), mas você também poderia conferir se o valor do dash é positivo ou negativo, e agir de acordo com o valor:
- Código:
incremento_ou_decremento := - sign(speed_dash);
Agora, simulado o cálculo do loop:
- Código:
hspeed += incremento_ou_decremento * 10
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DUVIDA] Loop Maquina de Estados.
Acho que nao consegui me expressar bem:
Vou tentar resumir o funcionamento do que eu queria que acontecesse.
Quando ele entra no estado Dash, a HSPEED ganha 12 ou -12 dependendo da direção, após isso, um if ou while faria a verificação "Se Hspeed maior ou menor que 0", ele acrecentaria ou decrementaria 1 para HSPEED até que a mesma retorne a zero e o personagem pare.
No objeto do player eu fiz num evento step, e foi tranquilo, usando apenas um IF.
If hspeed > 0 // para direita
{hspeed-=1;} //a cada step hspeed perde 1 unidade até zero.
Mas como nos scripts de estados nao temos steps (ou eu acho que não), eu tentei com IF e While, e nenhum resultou, no While ele retorna o hspeed a zero de forma MUITO RAPIDA que o personagem chega a nem se mecher. E no IF é decrementado apenas 1 e o Hspeed fica em 11.
Vou tentar resumir o funcionamento do que eu queria que acontecesse.
Quando ele entra no estado Dash, a HSPEED ganha 12 ou -12 dependendo da direção, após isso, um if ou while faria a verificação "Se Hspeed maior ou menor que 0", ele acrecentaria ou decrementaria 1 para HSPEED até que a mesma retorne a zero e o personagem pare.
No objeto do player eu fiz num evento step, e foi tranquilo, usando apenas um IF.
If hspeed > 0 // para direita
{hspeed-=1;} //a cada step hspeed perde 1 unidade até zero.
Mas como nos scripts de estados nao temos steps (ou eu acho que não), eu tentei com IF e While, e nenhum resultou, no While ele retorna o hspeed a zero de forma MUITO RAPIDA que o personagem chega a nem se mecher. E no IF é decrementado apenas 1 e o Hspeed fica em 11.
†Des†- Data de inscrição : 21/12/2008
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DUVIDA] Loop Maquina de Estados.
como eu disse antes, você já tentou usar friction?
faça o teste:
no create event do objeto coloque:
friction = 0.3;
agora no evento keyboard check pressed right:
hspeed = 12;
execute o jogo e veja se é isso que você queria.
faça o teste:
no create event do objeto coloque:
friction = 0.3;
agora no evento keyboard check pressed right:
hspeed = 12;
execute o jogo e veja se é isso que você queria.
Klior- Data de inscrição : 07/03/2010
Reputação : 13
Número de Mensagens : 426
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- C#
- Javascript
Re: [DUVIDA] Loop Maquina de Estados.
Não entendi sua primeira frase.Mas como nos scripts de estados nao temos steps (ou eu acho que não), eu tentei com IF e While, e nenhum resultou, no While ele retorna o hspeed a zero de forma MUITO RAPIDA que o personagem chega a nem se mecher. E no IF é decrementado apenas 1 e o Hspeed fica em 11.
No caso do while, ele faz tudo em um único step, ou seja, para o jogo até terminar de executar. Assim vai parar duma vez.
No caso do if, era para funcionar.
Manda uma screenshot do seu step, se possivel.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [DUVIDA] Loop Maquina de Estados.
Nos scripts de estados nós temos steps sim.
Ou melhor, os scripts de estados podem ocorrer a cada step. Tente visualizar a máquina funcionando: você entra num estado, executa algumas ações e a máquina continua rodando, entra no outro step no mesmo estado, executa as mesmas ações e a máquina continua rodando... Aí, finalmente, você entra no outro step no mesmo estado, executa algumas ações, mas aí a máquina encontra a condição pra você entrar em outro estado.
Você altera a variável que armazena o estado e executa o script desse outro estado OU NÃO nesse mesmo step. E a máquina continua rodando. Daí você entra no outro step nesse outro estado. As ações a serem executadas, agora, são outras. Nada a ver com o estado anterior. Nada a ver com diminuir a velocidade do dash.
Entendeu o que eu quis dizer com "talvez você esteja entrando em outro estado logo de cara e talvez precise de um estado totalmente novo só pra reduzir a velocidade"?
Ou melhor, os scripts de estados podem ocorrer a cada step. Tente visualizar a máquina funcionando: você entra num estado, executa algumas ações e a máquina continua rodando, entra no outro step no mesmo estado, executa as mesmas ações e a máquina continua rodando... Aí, finalmente, você entra no outro step no mesmo estado, executa algumas ações, mas aí a máquina encontra a condição pra você entrar em outro estado.
Você altera a variável que armazena o estado e executa o script desse outro estado OU NÃO nesse mesmo step. E a máquina continua rodando. Daí você entra no outro step nesse outro estado. As ações a serem executadas, agora, são outras. Nada a ver com o estado anterior. Nada a ver com diminuir a velocidade do dash.
Entendeu o que eu quis dizer com "talvez você esteja entrando em outro estado logo de cara e talvez precise de um estado totalmente novo só pra reduzir a velocidade"?
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: [DUVIDA] Loop Maquina de Estados.
Obrigado pessoal, agora eu entendi o que se passava...
Com base noq o Saim disse, eu percebi que o meu estado estava programado errado pelo simples fato de eu adicionar a HSPEED dentro do próprio estado, fazendo um loop infinito:
Entra estado:
HSPEED + ou - 12.
IF HSPEED > ou < que zero, incrementa ou decrementa.
E isso causava o bug de apenas diminuir 1 unidade nos steps, pq a HSPEED voltava a 12 sempre nos proximos steps.
Eu fiz as modificações aqui e deu certo, mas agora eu gostaria de tirar outra pequena dúvida em relação a fazer um "delay" para as ações, no caso desse DASH, eu gostaria que o player nao pudesse usa-lo seguidamente tão rápido. Com um delay de 1segundo mais ou menos.
Com base noq o Saim disse, eu percebi que o meu estado estava programado errado pelo simples fato de eu adicionar a HSPEED dentro do próprio estado, fazendo um loop infinito:
Entra estado:
HSPEED + ou - 12.
IF HSPEED > ou < que zero, incrementa ou decrementa.
E isso causava o bug de apenas diminuir 1 unidade nos steps, pq a HSPEED voltava a 12 sempre nos proximos steps.
Eu fiz as modificações aqui e deu certo, mas agora eu gostaria de tirar outra pequena dúvida em relação a fazer um "delay" para as ações, no caso desse DASH, eu gostaria que o player nao pudesse usa-lo seguidamente tão rápido. Com um delay de 1segundo mais ou menos.
†Des†- Data de inscrição : 21/12/2008
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DUVIDA] Loop Maquina de Estados.
Crie uma variavel que tenha o valor true quando você estiver em dash.
Ao dar o dash, verificar se a variavel é true, se for, definir como false e ativar um alarm.
No alarm, definir como true.
Até mais!
Ao dar o dash, verificar se a variavel é true, se for, definir como false e ativar um alarm.
No alarm, definir como true.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [DUVIDA] Loop Maquina de Estados.
Tudo perfeito agora pessoal, mas só uma correção quanto a resolução do problema aqui:
O if dentro do estado ainda não funciona, mas o friction no obj_player sim, quando eu jogo HSPEED 12 o friction que faz o decremento, e o script do estado cuida do resto.
O if dentro do estado ainda não funciona, mas o friction no obj_player sim, quando eu jogo HSPEED 12 o friction que faz o decremento, e o script do estado cuida do resto.
†Des†- Data de inscrição : 21/12/2008
Reputação : 1
Número de Mensagens : 29
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [DUVIDA] Loop Maquina de Estados.
Ótimo. Só tome cuidado com o seguinte:
As built-ins não levam em conta se você está usando a máquina de estados ou não. Portanto, se você coloca uma fricção, gravidade ou velocidade, eles continuarão com os valores dados mesmo que você mude de estado.
Por um lado, isso é bom, porque você não vai ter que se preocupar em organizar os valores em TODOS os estados.
Por outro, é péssimo, porque você pode querer um controle dessas variáveis "na mão", e não terá isso. Por exemplo, você tem o estado "andando", no qual a fricção é necessária e a gravidade, não.
Então, restam duas opções pra manter o uso das built-ins: alterar o valor dessas variáveis a cada step dentro do estado (o que consome uma quantidade desnecessária de processamento) ou cuidar de cada uma dessas variáveis na mudança entre estados, o que é um pouco trabalhoso e elimina a parte boa de usar as built-ins, mas funciona.
As built-ins não levam em conta se você está usando a máquina de estados ou não. Portanto, se você coloca uma fricção, gravidade ou velocidade, eles continuarão com os valores dados mesmo que você mude de estado.
Por um lado, isso é bom, porque você não vai ter que se preocupar em organizar os valores em TODOS os estados.
Por outro, é péssimo, porque você pode querer um controle dessas variáveis "na mão", e não terá isso. Por exemplo, você tem o estado "andando", no qual a fricção é necessária e a gravidade, não.
Então, restam duas opções pra manter o uso das built-ins: alterar o valor dessas variáveis a cada step dentro do estado (o que consome uma quantidade desnecessária de processamento) ou cuidar de cada uma dessas variáveis na mudança entre estados, o que é um pouco trabalhoso e elimina a parte boa de usar as built-ins, mas funciona.
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 maquina de estados
» duvida sobre maquina de estados
» [Resolvido]MEF - duvida sobre estados
» [DUVIDA]Loop de musica
» [Tutorial] Máquina de estados finitos
» duvida sobre maquina de estados
» [Resolvido]MEF - duvida sobre estados
» [DUVIDA]Loop de musica
» [Tutorial] Máquina de estados finitos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos