Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Bug em objeto que deveria seguir outro Tópico resolvido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
ragnarbrody
Novato
Novato
Reações: 0
Mensagens: 3

Bug em objeto que deveria seguir outro

Mensagem por ragnarbrody » Dom Ago 14, 2022 1:04 pm

Estou com um problema em meu jogo, meu protagonista é composto por 2 objetos, o objeto "corpo" e o objeto "cabeça", fiz eles separados pois quando o jogador passa por cima de uma bola de tinta, a cabeça do jogador deve mudar de cor, coloquei na aba "step" do objeto cabeça que a posição do eixo y e o do eixo x devem ser iguais das do objeto corpo, em um primeiro momento funciona, como mostrado no gif abaixo:

Gif andando
Gif andando
Mas se o jogador andar contra os limites do mapa, a cabeça se desloca para fora do corpo, como mostrado abaixo:

gif batendo na parede
gif batendo na parede
Sabem como posso resolver?

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 620
Localização: Dourados-MS

Contato:

Re: Bug em objeto que deveria seguir outro  Tópico resolvido

Mensagem por All-x » Dom Ago 14, 2022 5:57 pm

Ao invés de usar o evento "step" utilize o "end step". Assim não vai ficar com atraso.

Creio que deva funcionar.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
ragnarbrody
Novato
Novato
Reações: 0
Mensagens: 3

Re: Bug em objeto que deveria seguir outro

Mensagem por ragnarbrody » Dom Ago 14, 2022 8:43 pm

Cara, funcionou, obrigado, mas pode me explicar porque colocar no "end step" resolveu? e qual a diferença efetiva do "step" pro "end step"?

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 620
Localização: Dourados-MS

Contato:

Re: Bug em objeto que deveria seguir outro

Mensagem por All-x » Dom Ago 14, 2022 10:46 pm

Sequência dos eventos (veja a lista completa):
  • Begin Step
  • Step
  • End Step
  • Draw
No primeiro momento o GameMaker executa o Begin Step para todas as instâncias ativas. Depois de fazer isso, executa o Step para todas instâncias. E por último End Step para todas as instâncias (uma instância após a outra, e não tudo de uma vez). Até aqui na tela nada aconteceu, então 'por último' é executado o Draw para todas as instâncias e na tela o objeto se move.

Quando você utiliza o Step para mover suas instâncias, a nova posição só será desenhada no evento Draw. E quando você usa posição de outro objeto (x = corpo.x), naquele momento ele ainda pode não ter mudado de posição, pois a como é seguida uma lista (Quando falei que executa o evento pra todos, ele percorre um lista) pode ser que a posição do corpo ainda não tenha mudado. Dessa forma ele pega uma posição anterior, causando um atraso.

Colocando o código no End Step, temos a principio a certeza que o Step, já foi executado pra todas as instâncias (Inclusive com x, y atualizados vindos do sistema básico de movimento hspeed, vspeed e etc).

Em resumo: O Step ocorre antes das instâncias terem sua nova posição, e o End Step depois. Se tu faz a maior parte das movimentações no Step, quando utiliza o End Step conseguirá posições atualizadas.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Responder

Quem está online

Usuários navegando neste fórum: Google [Bot] e 7 visitantes