Eu digo "desaceleração" porque não estou usando aceleração no momento; o que quero dizer é mover a velocidade de volta ao zero, eventualmente parando.
Eu sou novo em vetores e não sou tão bom em física e coisas do tipo. Como a "desaceleração" é normalmente tratada?
O que eu tenho agora funciona, mas parece meio tolo .
update:function(Game, t, dt) {
var speed = Game.Input.isKeyDown('shift') ? 8 : 4;
if (Game.Input.isKeyDown('a')) {
this.velocity.i -= speed;
}
else if (Game.Input.isKeyDown('d')) {
this.velocity.i += speed;
}
else {
if (Math.abs(this.velocity.i) > 3) {
this.velocity.i += (this.velocity.i > 0) ? -speed : speed;
}
else {
this.velocity.i = 0;
}
}
if (Game.Input.isKeyDown('w')) {
this.velocity.j -= speed;
}
else if (Game.Input.isKeyDown('s')) {
this.velocity.j += speed;
}
else {
if (Math.abs(this.velocity.j) > 3) {
this.velocity.j += (this.velocity.j > 0) ? -speed : speed;
}
else {
this.velocity.j = 0;
}
}
this.updateVectors(dt);
}
Eu usei 3 porque qualquer coisa menor exibe um comportamento estranho, acho que se eu aumentasse a velocidade, ele precisaria ser alterado.
2d
mathematics
physics
Xavura
fonte
fonte
velocity.i += speed;
ospeed
é de fato sua aceleração, ou seja, a taxa que a velocidade muda por. :)Respostas:
Algo tão simples quanto
funciona bem.
fonte
No Pseudocódigo, eu faço variações disso:
Velocidade + = ((MoveDirection * MaximumSpeed) - Velocidade) * AccelerationFactor
Onde:
Que lida com a aceleração e a desaceleração de maneira agradável em uma curva, em vez de uma linha. Se você quiser diferentes taxas de aceleração e desaceleração, poderá fazer instruções IF que determinam se o jogador está tentando não se mover ou se mover na direção oposta.
fonte
As respostas aqui (
vel = vel * 0.9
) são realmente amortecedoras , não o que eu consideraria 'desaceleração' .Costumo desacelerar assim:
Alguns prós e contras vs. amortecimento:
Prós :
Contras :
fonte
Simplificando, em pseudo-código:
No entanto, você precisaria verificar se (velocidade atual <0,001f) ou algo assim e definido como 0.
fonte