Я говорю «замедление», потому что в данный момент я не использую ускорение; Я имею в виду, что скорость движется обратно к нулю, в конце концов останавливается.
Я новичок в векторах и не очень хорош с физикой и тому подобное. Как обычно обрабатывается «замедление»?
То, что у меня сейчас работает, но вроде как хакерское .
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);
}
Я использовал 3, потому что все, что ниже, демонстрирует странное поведение, я предполагаю, что если я увеличу скорость, то это нужно будет изменить.
2d
mathematics
physics
Xavura
источник
источник
velocity.i += speed;
speed
Ответы:
Что-то простое, как
работает хорошо.
источник
В псевдокоде я делаю варианты этого:
Скорость + = ((MoveDirection * MaximumSpeed) - Скорость) * AccelerationFactor
Куда:
Который обрабатывает и Ускорение и Замедление приятно в изогнутой, а не линии. Если вам нужны разные скорости ускорения и замедления, вы можете сделать операторы IF, которые определяют, пытается ли игрок не двигаться или двигаться в противоположном направлении.
источник
Ответы здесь (
vel = vel * 0.9
) на самом деле затухающие , а не то, что я бы назвал «замедлением» .Я часто делаю замедление вот так:
Некоторые плюсы и минусы против демпфирования:
Плюсы :
Минусы :
источник
Проще говоря, в псевдокоде:
Тем не менее, вам нужно проверить, если (текущая скорость <0,001f) или что-то и установить в 0.
источник