ฉันเห็นบทช่วยสอนเกม 2d และหนังสือจำนวนหนึ่งซึ่งตำแหน่งก่อนหน้าของวัตถุถูกเก็บไว้ในสถานะแทนที่จะเป็นเวกเตอร์ความเร็ว ความเร็วจะถูกคำนวณในแต่ละเฟรมเป็นความแตกต่างระหว่างตำแหน่ง
ข้อดีของวิธีการนี้คืออะไร
ฉันเห็นบทช่วยสอนเกม 2d และหนังสือจำนวนหนึ่งซึ่งตำแหน่งก่อนหน้าของวัตถุถูกเก็บไว้ในสถานะแทนที่จะเป็นเวกเตอร์ความเร็ว ความเร็วจะถูกคำนวณในแต่ละเฟรมเป็นความแตกต่างระหว่างตำแหน่ง
ข้อดีของวิธีการนี้คืออะไร
คำตอบ:
โดยไม่ทราบว่าบทเรียนหรือหนังสือที่คุณได้อ่านตรงนี้คือสิ่งที่ฉันสามารถบอกคุณได้
เพื่อให้แม่นยำยิ่งขึ้นในแง่ของคำจำกัดความของฟิสิกส์: ทิศทางเวกเตอร์ถูกคำนวณเป็นความแตกต่างระหว่างตำแหน่งปัจจุบันและตำแหน่งสุดท้าย ความเร็วเวคเตอร์เท่ากับที่หารด้วยเวลาที่ผ่านไปเมื่อไปจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่ง ดู: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity
อย่างไรก็ตามเมื่อเวลาที่ผ่านไปได้รับการพิจารณาว่าเป็น "1 เฟรม" ทั่วไปเช่นจากเฟรมสุดท้ายไปจนถึงปัจจุบันความเร็วเวคเตอร์และทิศทางเวกเตอร์จะเท่ากัน ในรหัสปลอม:
direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time
โดยทั่วไปแล้วเหตุผลหลักในการจัดเก็บตำแหน่งในเฟรมสุดท้ายและการรับตำแหน่งในเฟรมปัจจุบันคืออาจเป็นวิธีเดียวหรือวิธีที่ถูกที่สุดในการรู้ทิศทางที่ถูกต้อง (และดังนั้นความเร็วที่อัปเดต) เช่นทิศทางการเคลื่อนไหวในเฟรมปัจจุบัน
สมมติว่าคุณเก็บทิศทาง (หรือแม้แต่ความเร็ว) ในเฟรมที่กำหนด ในเฟรมถัดไปวิธีเดียวที่จะรู้ว่าทิศทาง (หรือแม้แต่ความเร็ว) มีการเปลี่ยนแปลงคือถ้าคุณคำนวณมันอีกครั้ง เหตุผลที่ทิศทางก่อนหน้าหรือความเร็วก่อนหน้านี้ไม่อนุญาตให้คุณทราบทิศทางปัจจุบันหรือความเร็วปัจจุบันในกรณีที่การเคลื่อนไหวเปลี่ยนจากเฟรมหนึ่งเป็นเฟรมถัดไป
ตอนนี้โดยคำนึงถึงบทเรียนที่คุณได้กล่าวถึงในความคิดเห็นสำหรับคำถามของคุณเองมันยิ่งชัดเจนยิ่งขึ้น หนึ่งในบทเรียนที่ผู้เขียนบอกว่า:
ตอนนี้เรามาสอนวิธีการย้ายอนุภาคด้วยการรวม Verlet นั่นเป็นวิธีแฟนซีที่จะบอกว่าเรากำลังจะหาว่าอนุภาคของเราเคลื่อนที่เร็วแค่ไหนโดยการเปรียบเทียบตำแหน่งของเฟรมนี้กับตำแหน่งสุดท้ายของเฟรม ทำไม? เพราะนั่นทำให้เรามีความเร็วโดยปริยาย - การเปลี่ยนแปลงตำแหน่งปัจจุบันของอนุภาคใด ๆ จะอัปเดตความเร็วโดยอัตโนมัติ
ดังนั้นอย่างที่คุณเห็นการจัดเก็บตำแหน่งเฟรมสุดท้ายช่วยให้ดังที่ฉันได้กล่าวไว้ข้างต้นการคำนวณความเร็วที่ปรับปรุงแล้วในเฟรมปัจจุบันเมื่อวัตถุ (ในบทช่วยสอนเป็นอนุภาค) เปลี่ยนตำแหน่ง หากคุณบันทึกเฉพาะทิศทางหรือความเร็วในเฟรมสุดท้ายคุณจะไม่สามารถอัปเดตได้อย่างง่ายดายในกรณีที่ตำแหน่งเปลี่ยนจากอดีตเป็นเฟรมปัจจุบัน ดังนั้นตามที่ระบุไว้ในบทช่วยสอนอื่น ๆ ที่คุณเชื่อมโยงด้วยการบันทึกตำแหน่งก่อนหน้าช่วยให้สามารถอัปเดตความเร็วโดยอัตโนมัติเมื่อมีการเปลี่ยนตำแหน่ง