เจสัน
แทนที่จะมีสามคุณลักษณะของวัตถุ
- ตำแหน่งจุด (x, y)
- ทิศทาง Vector2D (x, y)
- ความเร็วสูง
มันง่ายกว่ามากในการรวมทิศทางและความเร็วเข้ากับเวกเตอร์ความเร็ว จากนั้นคุณมีเพียงสองคุณสมบัติ
- ตำแหน่งจุด (x, y)
- ความเร็ว Vector2D (x, y)
กำลังอัปเดตตำแหน่ง
เมื่อคุณต้องการอัปเดตตำแหน่งของวัตถุมันง่ายเหมือน:
position.x += velocity.x * Δt;
position.y += velocity.y * Δt;
Δt
เดลต้าเวลาของคุณอยู่ที่ไหน- หรือเวลาต่างกัน - หรือขั้นตอนเวลา
การอัปเดตตำแหน่งและความเร็ว
นอกจากนี้ยังเป็นวิธีที่ง่ายมากในการจัดการกับการเร่งความเร็ว (เช่นจากแรงโน้มถ่วง) หากคุณมีเวกเตอร์ความเร่งคุณสามารถอัปเดตความเร็วและตำแหน่งพร้อมกันดังนี้:
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;
(นี่คือสูตร s = vt + ½at²จาก Physics 101)
ใช้ความเร็ว
หากคุณต้องการใช้ความเร็วที่กำหนดในทิศทางปกติคุณสามารถตั้งค่าความเร็วดังนี้:
velocity.x = normalizedDirection.x * speed;
velocity.y = normalizedDirection.y * speed;
ได้รับความเร็ว
และถ้าคุณต้องการทำสิ่งตรงกันข้าม - ได้มาซึ่งความเร็วและทิศทางจากเวกเตอร์ความเร็วที่กำหนด - คุณสามารถใช้ทฤษฎีบทพีทาโกรัสหรือ.Length()
วิธีการ:
speed = velocity.Length();
และเมื่อความเร็วเป็นที่รู้จักทิศทางปกติสามารถคำนวณได้โดยการหารความเร็วด้วยความเร็ว (ระมัดระวังเพื่อหลีกเลี่ยงการหารด้วยศูนย์):
if (speed != 0) {
normalizedDirection.x = velocity.x / speed;
normalizedDirection.y = velocity.y / speed;
} else {
normalizedDirection.x = 0;
normalizedDirection.y = 0;
}