Je dis "décélération" parce que je n'utilise pas d'accélération pour le moment; ce que je veux dire, c'est ramener la vitesse vers zéro, finalement arrêter.
Je suis nouveau dans les vecteurs et pas très bon en physique et autres. Comment la "décélération" est-elle normalement gérée?
Ce que j'ai maintenant fonctionne, mais cela semble un peu hackish .
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);
}
J'ai utilisé 3 car tout ce qui est inférieur présente un comportement étrange, je suppose que si j'augmentais la vitesse, il faudrait la changer.
2d
mathematics
physics
Xavura
la source
la source
velocity.i += speed;
duspeed
est en fait votre accélération, soit le taux qui change la vitesse par. :)Réponses:
Quelque chose d'aussi simple que
fonctionne bien.
la source
Dans Pseudocode, je fais des variations de ceci:
Vitesse + = ((MoveDirection * Vitesse maximale) - Vitesse) * AccelerationFactor
Où:
Qui gère à la fois l' accélération et la décélération dans une courbe plutôt qu'une ligne. Si vous voulez des taux d'accélération et de décélération différents, vous pouvez faire des instructions IF qui déterminent si le joueur essaie de ne pas bouger ou de se déplacer dans la direction opposée.
la source
Les réponses ici (
vel = vel * 0.9
) sont en fait un amortissement , pas ce que je considérerais comme une «décélération» .Je fais souvent une décélération comme ceci:
Quelques avantages et inconvénients par rapport à l'amortissement:
Avantages :
Inconvénients :
la source
Très simplement, en pseudo code:
Cependant, vous devrez vérifier si (vitesse actuelle <0,001f) ou quelque chose et régler à 0.
la source