Saya katakan "deselerasi" karena saya tidak menggunakan akselerasi saat ini; yang saya maksud adalah menggerakkan kecepatan kembali ke nol, akhirnya berhenti.
Saya baru mengenal vektor dan tidak terlalu hebat dalam fisika dan sebagainya. Bagaimana biasanya "deselerasi" ditangani?
Apa yang saya miliki sekarang berfungsi, tetapi sepertinya agak retas .
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);
}
Saya menggunakan 3 karena apapun yang lebih rendah menunjukkan perilaku aneh, saya menduga jika saya meningkatkan kecepatan maka itu perlu diubah.
2d
mathematics
physics
Xavura
sumber
sumber
velocity.i += speed;
yangspeed
sebenarnya percepatan Anda, yaitu tingkat yang kecepatan perubahan oleh. :)Jawaban:
Sesuatu yang sederhana
berfungsi dengan baik.
sumber
Di Pseudocode, saya melakukan variasi ini:
Kecepatan + = ((MoveDirection * MaximumSpeed) - Kecepatan) * AccelerationFactor
Dimana:
Yang menangani kedua Percepatan dan Perlambatan baik dalam melengkung, bukan garis. Jika Anda menginginkan kecepatan akselerasi dan perlambatan yang berbeda, Anda bisa melakukan pernyataan IF yang menentukan apakah pemain berusaha untuk tidak bergerak atau bergerak ke arah yang berlawanan.
sumber
Jawabannya di sini (
vel = vel * 0.9
) sebenarnya redaman , bukan apa yang saya anggap 'deselerasi' .Saya sering melakukan deselerasi seperti ini:
Beberapa pro dan kontra vs redaman:
Pro :
Cons :
sumber
Sederhananya, dalam kode pseudo:
Namun, Anda perlu memeriksa apakah (kecepatan saat ini <0,001f) atau sesuatu dan set ke 0.
sumber