Jason,
Daripada memiliki tiga atribut objek,
- Titik (x, y) posisi
- Arah Vector2D (x, y)
- Kecepatan int
seringkali lebih mudah untuk menggabungkan arah dan kecepatan menjadi vektor kecepatan. Maka Anda hanya memiliki dua atribut,
- Titik (x, y) posisi
- Vector2D (x, y) kecepatan
Memperbarui posisi
Saat Anda perlu memperbarui posisi objek, sesederhana:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
di mana Δt
delta waktu Anda - atau perbedaan waktu - atau langkah waktu.
Memperbarui posisi dan kecepatan
Cara menangani akselerasi (seperti dari gravitasi) juga sangat mudah. Jika Anda memiliki vektor percepatan, Anda dapat memperbarui kecepatan dan posisi bersama-sama seperti ini:
position.x += (velocity.x * Δt) + (0.5 * acceleration.x * Δt * Δt);
position.y += (velocity.y * Δt) + (0.5 * acceleration.y * Δt * Δt);
velocity.x += acceleration.x * Δt;
velocity.y += acceleration.y * Δt;
(Ini pada dasarnya adalah rumus s = vt + ½at² dari Fisika 101.)
Menerapkan kecepatan
Jika Anda ingin menerapkan kecepatan tertentu dalam beberapa arah yang dinormalkan, Anda dapat mengatur kecepatan seperti ini:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Turunkan kecepatan
Dan jika Anda perlu melakukan sebaliknya - menurunkan kecepatan dan arah dari vektor kecepatan yang diberikan - Anda cukup menggunakan teorema Pythagoras atau .Length()
metode:
speed = velocity.Length();
Dan begitu kecepatan diketahui, arah yang dinormalisasi dapat dihitung dengan membagi kecepatan dengan kecepatan (berhati-hati untuk menghindari membagi dengan nol):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}