Página 1 de 1

1 Imagem, 1 Tutorial #001: Movimento (Plataforma)

Enviado: Sex Mai 17, 2019 1:36 pm
por All-x
1 Imagem, 1 Tutorial: Movimento (Plataforma)

Imagem

Acesse o código no PasteBin:


Ferramenta e Versão: Game Maker (7 no mínimo, ideal Studio).

Conceito:

O código para evitar as colisões funciona utilizando o mecanismo interno de movimento do próprio GameMaker. Quando definimos algum valor paras as variáveis hspeed e vspeed, a instância do objeto não se move imediatamente.

Exemplo (Evento Step ou qualquer outro antes do End Step e eventos de desenho):

Código: Selecionar todos

hspeed = 10000;
hspeed = 5;
hspeed = 10;
A instância não se move em momento algum no código acima. Ela vai se mover assim que terminar Step antes do End Step, em um evento interno aplicando o hspeed (10) no x da instância.

Código: Selecionar todos

x += hspeed; // Ou seja, o valor 10 é acrescido
Não é exatamente esse o código, pois o sistema interno considera o gravity_direction e afins. Mas o importante é saber que a instância só se move de fato quando alteramos as variáveis x e y. Tudo depende da ordem dos eventos.

O código pra evitar colisões faz uma checagem de colisão somando as velocidades hspeed e vspeedas posições x e y. Caso haja colisão o valor das velocidades é reduzido (Respeitando sua orientação). O ideal seria que essa parte do código fosse a última a ser executada. Então deve se ter cuidado ao modificar as velocidades fora do player.

Vantagens:
  • Pouco código.
  • Aceita números quebrados (Inclusive menores do que 1).
  • Ainda utiliza o sistema nativo de movimento (hspeed e vspeed).
Desvantagens:
  • Não indicado para velocidades acima do tamanho da mascara da sprite. A função place_free usa a mascara para checar a colisão, então caso a velocidade horizontal seja 32px e a mascara tenha 16px, haverá um espaço de 16px sem checagem de colisão). Pode ser contornado aumentando  o número de verificações ao longo do vetor com um laço de repetição.
  • Não pode utilizar o gravity e speed (Ou se usar, fazer os devidos ajustes no código de evitar colisões).