Como podemos fazer nosso personagem se mover suavemente através de peças? Ele move ladrilhos por ladrilhos, mas isso parece pouco profissional. Além disso, quando você mantém as teclas de seta pressionadas, ele fecha a tela. Como podemos impedir que isso aconteça?
8
Respostas:
O movimento suave pode ser alcançado de várias maneiras. E isso realmente depende do tipo de movimento que você deseja permitir.
Pseudo-código:
Onde
MoveTowards
apenas assume a posição atual e adiciona uma parte da distância entre ela e a posição de destino.Manter as teclas de seta pressionadas para mover os caracteres também pode ser implementado de algumas maneiras diferentes. Provavelmente, o que você está fazendo é algo como:
Isso realmente faria com que o personagem passasse pela tela. Como você atualizaria a posição várias vezes por segundo. Uma maneira um pouco melhor de implementar isso seria adicionar um atraso. Algo como
Isso adicionará um temporizador de atraso e somente atualizará a posição do bloco quando o
movementDelay
valor for atingido.fonte
Eu consigo identificar dois problemas. O primeiro está relacionado ao movimento suave e o segundo está relacionado ao personagem saindo da tela.
Para criar um movimento suave, você pode usar uma técnica chamada Interpolação Linear ou (LERP) para suavizar o movimento. Basicamente, como ele funciona é entre o ponto inicial e o ponto final, você calcula um conjunto de distâncias cada vez menores para simular movimentos suaves e diminuir a velocidade quando o ponto final é quase atingido.
O exemplo mais simples dessa função seria:
À medida que o personagem se aproxima do ponto 2, ele diminui gradualmente. Observe que eles nunca tocam o ponto 2, mas ficam infinitamente próximos. Você precisaria corrigir isso e se o jogador estiver a uma distância infinitamente pequena do ponto 2, podemos considerar o jogador no ponto 2.
A segunda questão que você mencionou está relacionada ao seu personagem voando para fora da tela. Isso é resultado da leitura de cada entrada de atualização de loop do jogo combinada com o movimento instantâneo entre as peças.
Idealmente para resolver isso, em seu código você precisa decidir
fonte