Jason
Üç nesne özelliğine sahip olmak yerine,
- Nokta (x, y) konumu
- Vector2D (x, y) yönü
- İnt hız
yönü ve hızı bir hız vektöründe birleştirmek çoğu zaman daha kolaydır. O zaman sadece iki özelliğin var.
- Nokta (x, y) konumu
- Vector2D (x, y) hızı
Güncelleme pozisyonu
Nesnenin konumunu güncellemeniz gerektiğinde, bu kadar basittir:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
Nerede Δt
veya zaman farkı - - veya zaman adım saat delta.
Konum ve hızın güncellenmesi
Ayrıca ivmelenmeyi (yerçekimi gibi) ele almak da çok kolaydır. Eğer bir hızlanma vektörünüz varsa, hızı ve pozisyonu şu şekilde birlikte güncelleyebilirsiniz:
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;
(Bu temel olarak Physics 101'ten s = vt + ½at² formülüdür.)
Hız uygulamak
Belirli bir hızı belirli bir normal yönde uygulamak istiyorsanız, hızı aşağıdaki gibi ayarlayabilirsiniz:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
Hız türetmek
Ve eğer tersini yapmanız gerekiyorsa - hız ve yönü belirli bir hız vektöründen türetmek - Pisagor teoremini veya .Length()
yöntemini kullanabilirsiniz:
speed = velocity.Length();
Ve hız bilindikten sonra, normalize edilmiş yön, hızı hıza bölerek hesaplanabilir (sıfıra bölmeyi önlemek için dikkatli olun):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}