Entrar
Últimos assuntos
» Problemas com particulaspor RastaMaan Dom 12 maio 2024, 17:03
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08
» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43
» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
[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
» [DUVIDA]Loop de musica
» [Tutorial] Máquina de estados finitos
» [Resolvido]Erro na máquina de estados
» duvida sobre maquina de estados
» [DUVIDA]Loop de musica
» [Tutorial] Máquina de estados finitos
» [Resolvido]Erro na máquina de estados
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|