Mówię „zwalnianie”, ponieważ obecnie nie używam przyspieszenia; mam na myśli przesunięcie prędkości z powrotem w kierunku zera, ostatecznie zatrzymując się.
Jestem nowy w wektorze i nie tak dobrze z fizyką i tym podobne. Jak zwykle obsługiwane jest „zmniejszanie prędkości”?
To, co mam teraz, działa, ale wydaje się trochę hacking .
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);
}
Użyłem 3, ponieważ cokolwiek niższego wykazuje dziwne zachowanie, domyślam się, że jeśli zwiększyłem prędkość, to trzeba by to zmienić.
2d
mathematics
physics
Xavura
źródło
źródło
velocity.i += speed;
speed
Odpowiedzi:
Coś tak prostego jak
działa ładnie.
źródło
W Pseudocode robię odmiany tego:
Prędkość + = ((MoveDirection * MaximumSpeed) - Speed) * AccelerationFactor
Gdzie:
Który ładnie radzi sobie zarówno z przyspieszaniem, jak i zwalnianiem na zakrzywionej, a nie liniowej linii. Jeśli chcesz mieć różne prędkości przyspieszania i zwalniania, możesz wykonać instrukcje JEŻELI, które określają, czy gracz próbuje się nie ruszyć ani nie ruszyć w przeciwnym kierunku.
źródło
Odpowiedzi tutaj (
vel = vel * 0.9
) są w rzeczywistości tłumieniem , a nie tym, co uważam za „opóźnienie” .Często robię takie spowolnienie:
Niektóre zalety i wady a tłumienie:
Plusy :
Wady :
źródło
Bardzo prosto, w pseudokodzie:
Należy jednak sprawdzić, czy (aktualna prędkość <0,001 f) lub coś, i ustawić na 0.
źródło