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;
Código: Selecionar todos
x += hspeed; // Ou seja, o valor 10 é acrescido
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).
- 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).