ฟิสิกส์ยานพาหนะด้วยการลื่นไถล


13

ฉันจะสร้างฟิสิกส์รถยนต์สำหรับรถยนต์ที่สามารถยึดเกาะถนนได้อย่างไร ฉันต้องการให้ดูเหมือนว่าคนขับมีเท้าแบนดังนั้นเมื่อคุณกดแก๊สพวกเขาขับรถ (ด้านหลัง) ล้อลากฉับและทำให้ควบคุมได้ยาก ฉันต้องการทำโดนัทและ "ล่องลอย" รอบมุม

ฉันต้องรู้ด้วยว่า "ลื่นไถล" เกิดขึ้นได้อย่างไรดังนั้นฉันสามารถเพิ่มเครื่องหมายควันและยางในสัดส่วน

สมมติว่าเป็นเกมรถสไตล์ 2d จากบนลงล่าง

ขอบคุณ

คำตอบ:


10

นี่เป็นเวอร์ชั่นที่ง่ายมาก แต่ก็ใช้ได้ดีสำหรับเกมประเภทอาร์เคดส่วนใหญ่ คุณต้องการคุณสมบัติต่อไปนี้:

positionX, positionY - where the car is
velocityX, velocityY - speed on each axis
drag - how fast the car slows down
angle - the rotation of the car, in radians
angularVelocity - speed the car is spinning, in radians
angularDrag - how fast the car stops spinning
power - how fast car can accelerate
turnSpeed - how fast to turn

ทุกเฟรม:

positionX += velocityX
positionY += velocityY
velocityX *= drag
velocityY *= drag
angle += angularVelocity
angularVelocity *= angularDrag

เพื่อเร่งความเร็ว

velocityX += sin(angle) * power;
velocityY += cos(angle) * power;

เพื่อคัดท้ายซ้าย

angularVelocity -= turnSpeed;

เพื่อคัดท้ายขวา

angularVelocity += turnSpeed;

เพื่อให้ได้ดริฟท์ที่ดีให้ตั้งค่า drag and angularDrag ให้ใกล้กับ 1 เช่น 0.9


ดังนั้นการควบคุมจะเป็นพลังงาน (เค้น) และความเร็วเชิงมุม (พวงมาลัย)? หรือฉันขาดการแปลงบ้าง?
drxzcl

ไม่มัน - ลืมอธิบายวิธีการบังคับ อัปเดตด้วยตัวแปร turnSpeed ​​ใหม่แล้ว
Iain

2

ฉันกำลังอ่านกระดาษวันนี้ซึ่งจำลองการเปลี่ยนแปลงของยานพาหนะในระหว่างการชนและการหมุน:

จิงโจว; Jianbo Lu; Huei Peng, "ยานพาหนะ Dynamics ตอบสนองต่อการซ้อมรบของเทคนิคการตรึงความแม่นยำ", การดำเนินการของ ASME 2008 ระบบไดนามิกและการประชุมควบคุม

ประกอบด้วยโมเดลฟิสิกส์ซึ่งแสดงถึงช่วงเวลาการหมุนและการสูญเสียการยึดเกาะของยางล้อหลังในขณะที่หันเหจากการชนโดยเจตนา ดูเหมือนว่าโปรแกรมเมอร์เกมที่สนใจการเปลี่ยนแปลงของยานพาหนะในระหว่างการชน


ค่อนข้างศึกษา แต่น่าเสียดายที่ไม่เหมาะกับปัญหาที่เกิดขึ้นในมือ กระดาษคือการวิเคราะห์แบบ 3 มิติพร้อมม้วนยานพาหนะและทั้งหมด คำถามที่เกี่ยวข้องกับเกมมุมมอง 2D ด้านบน ดังนั้นฟิสิกส์ 2D ไม่ใช่ 3D
Bram

1

โดยทั่วไปฉันไม่ได้แนะนำฟิสิกส์ของ Bourg สำหรับโปรแกรมเมอร์เกมแต่เขาพูดถึงเรื่องนี้เล็กน้อยในบทที่ 10 (ประมาณหน้า 171) และอาจให้จุดเริ่มต้นแก่คุณ

น่าเสียดายที่รหัสยานพาหนะใน PhysX ยังคงเป็น 'ตัวอย่าง' และไม่มีการจัดทำเป็นเอกสารที่ดีดังนั้นคุณจึงไม่สามารถทราบได้อย่างชัดเจนว่าวิธีการทำงานนั้นเป็นอย่างไร ฉันเชื่อว่าฉันเห็นโค้ดที่ได้จากตัวอย่างของพวกเขาจะแสดงพฤติกรรมที่คุณกำลังมองหาในแบบ 3 มิติ แต่เป็นการจำลองระดับต่ำกว่าที่ฉันคิดว่าคุณต้องการ


1

สิ่งแรกที่คุณต้องเข้าใจคือ "อัตราส่วนการลื่น" และ "แรงฉุดวงกลม" อัตราส่วนสลิปเป็นค่าประมาณที่ดีสำหรับพฤติกรรมของยางโดยมีความสัมพันธ์แบบไม่เป็นเชิงเส้นระหว่างความแตกต่างของมุมกับแรงยางด้านข้าง นอกจากนี้ยังให้ข้อมูลตอบกลับเกี่ยวกับแรงบิดของผู้ขับขี่ (สำหรับพวงมาลัยบังคับตอบกลับด้วย)

รุ่นที่เรียบง่ายของแนวคิดทั้งสองมีดังนี้: ยิ่งมุมแตกต่างกันระหว่างทิศทางการหมุนและทิศทางการเคลื่อนไหวยิ่งมีแรงตั้งฉากกับทิศทางการหมุนมากขึ้น (แรงด้านข้าง) ถึงจุดสูงสุดที่ (โดยทั่วไป) อาจจะอยู่ที่ 5 °ถึง 8 °และตกลงไปจากที่นั่นหากมุมยางเพิ่มขึ้น

วงกลมลากเป็นพื้นลิมิตเตอร์ที่ตัดแรงเวคเตอร์ใดก็ได้ที่อยู่นอกมัน มันจำลองแบบที่การเร่งความเร็วอย่างหนัก / การเบรกลดความสามารถในการบังคับเลี้ยวและในทางกลับกัน ขนาดของวงกลมลาก (เวกเตอร์แรงฉุดสูงสุด) ปรับขนาดด้วยแรงกดยางลงบนพื้น

คุณจะต้องจำลองแรงด้านข้าง (การบังคับเลี้ยว) แยกต่างหากจากแรงบิดในการขับขี่ / การเบรก (การหมุน) และแรงฉุดของฝ่ายตรงข้ามจากพื้นดิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.