[DUVIDA] Loop Maquina de Estados.

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

Resolvido [DUVIDA] Loop Maquina de Estados.

Mensagem por †Des† em Sex 25 Nov 2011, 14:10

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.


Última edição por †Des† em Dom 27 Nov 2011, 20:20, editado 1 vez(es)

†Des†

Número de Mensagens : 29
Idade : 23
Data de inscrição : 21/12/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por Convidad em Sex 25 Nov 2011, 15:06

Você pode tentar usar um choose() ,mas ao certo,não entendi sua dúvida,me explique melhor.....

Convidad
Convidado


Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por Klior em Sex 25 Nov 2011, 16:16

já tentou usar friction em vez de fazer um loop?

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por saim em Sex 25 Nov 2011, 17:38

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.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por GameMakerTutoriais em Sex 25 Nov 2011, 18:43

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

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por †Des† em Sab 26 Nov 2011, 23:33

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.

†Des†

Número de Mensagens : 29
Idade : 23
Data de inscrição : 21/12/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por Klior em Dom 27 Nov 2011, 10:51

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.

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por PedroX em Dom 27 Nov 2011, 13:26

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.
Não entendi sua primeira frase.
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!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por saim em Dom 27 Nov 2011, 16:05

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"?

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por †Des† em Dom 27 Nov 2011, 17:14

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.

†Des†

Número de Mensagens : 29
Idade : 23
Data de inscrição : 21/12/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por PedroX em Dom 27 Nov 2011, 19:22

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!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por †Des† em Dom 27 Nov 2011, 20:05

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.

†Des†

Número de Mensagens : 29
Idade : 23
Data de inscrição : 21/12/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por saim em Seg 28 Nov 2011, 09:50

Ó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.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [DUVIDA] Loop Maquina de Estados.

Mensagem por Conteúdo patrocinado Hoje à(s) 08:13


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