คำถามติดแท็ก fixed-timestep

11
ฉันควรใช้ขั้นตอนเวลาแบบคงที่หรือแบบแปรผันเมื่อใด
ลูปเกมควรเป็นไปตามขั้นตอนเวลาคงที่หรือแปรผันหรือไม่? เป็นหนึ่งที่เหนือกว่าเสมอหรือตัวเลือกที่เหมาะสมแตกต่างกันไปตามเกม? ขั้นตอนเวลาผันแปร การอัปเดตทางฟิสิกส์จะถูกส่งผ่านอาร์กิวเมนต์ "เวลาที่ผ่านไปนับตั้งแต่การอัปเดตครั้งล่าสุด" และขึ้นอยู่กับอัตราเฟรม position += distancePerSecond * timeElapsedซึ่งอาจหมายถึงทำคำนวณเป็น จุดเด่น : ราบรื่นและง่ายต่อการเขียนโค้ดจุด ด้อย : ไม่สามารถกำหนดค่าได้คาดเดาไม่ได้ในขั้นตอนเล็กหรือใหญ่ ตัวอย่างdeWiTTERS : while( game_is_running ) { prev_frame_tick = curr_frame_tick; curr_frame_tick = GetTickCount(); update( curr_frame_tick - prev_frame_tick ); render(); } ขั้นตอนเวลาคงที่ การอัปเดตอาจไม่ยอมรับ "เวลาที่ผ่านไป" เนื่องจากจะถือว่าการอัปเดตแต่ละรายการเป็นช่วงเวลาที่แน่นอน การคำนวณอาจทำได้position += distancePerUpdateดังนี้ ตัวอย่างมีการแก้ไขระหว่างการเรนเดอร์ จุดเด่น : สามารถคาดการณ์ได้กำหนดขึ้น (ซิงค์เครือข่ายง่ายกว่า) รหัสการคำนวณที่ชัดเจนจุด ด้อย …

5
การอัพเดทเรนเดอร์อิสระในเกมลูปคืออะไร?
มีบทความหนังสือและการอภิปรายมากมายในลูปเกม อย่างไรก็ตามฉันมักเจอสิ่งนี้: while(running) { processInput(); while(isTimeForUpdate) { update(); } render(); } สิ่งที่ทำให้ฉันรำคาญใจเกี่ยวกับวิธีการนี้คือการแสดงผลแบบ "ปรับปรุงอิสระ" เช่นสร้างเฟรมเมื่อไม่มีการเปลี่ยนแปลงเลย ดังนั้นคำถามของฉันคือทำไมวิธีการนี้มักถูกสอน

2
จะแก้ไขระหว่างสองสถานะเกมได้อย่างไร
รูปแบบที่ดีที่สุดในการสร้างระบบคือตำแหน่งของวัตถุทั้งหมดที่จะถูกแก้ไขระหว่างสถานะการอัพเดทสองสถานะ การอัปเดตจะทำงานที่ความถี่เดิมเสมอ แต่ฉันต้องการให้สามารถแสดงผลที่ FPS ใด ๆ ดังนั้นการเรนเดอร์จะราบรื่นเท่าที่จะเป็นไปได้ไม่ว่าเฟรมต่อวินาทีไม่ว่าจะต่ำกว่าหรือสูงกว่าความถี่การอัปเดตก็ตาม ฉันต้องการอัปเดต 1 เฟรมเป็นการประมาณค่าในอนาคตจากเฟรมปัจจุบันเป็นเฟรมในอนาคต คำตอบนี้มีลิงก์ที่พูดถึงการทำสิ่งนี้: การกำหนดเวลาแบบกึ่งถาวรหรือแบบคงที่ครบหรือไม่ แก้ไข: ฉันจะใช้ความเร็วล่าสุดและความเร็วในการแก้ไขได้อย่างไร ตัวอย่างเช่นการแก้ไขเชิงเส้นเพียงอย่างเดียวมันจะเคลื่อนที่ด้วยความเร็วเท่ากันระหว่างตำแหน่ง ฉันต้องการวิธีที่จะให้มันสอดแทรกตำแหน่งระหว่างสองจุด แต่คำนึงถึงความเร็วในแต่ละจุดสำหรับการแก้ไข มันจะมีประโยชน์สำหรับการจำลองอัตราต่ำเช่นผลกระทบของอนุภาค

6
โครงสร้างข้อมูลสำหรับการแก้ไขและเธรด?
ฉันได้รับการจัดการกับปัญหาการกระเพื่อมอัตราเฟรมกับเกมของฉันเมื่อเร็ว ๆ นี้และดูเหมือนว่าทางออกที่ดีที่สุดจะเป็นที่แนะนำโดย Glenn Fiedler (Gaffer ในเกม) ในคลาสสิกFix Your Timestep! บทความ. ตอนนี้ - ฉันใช้ขั้นตอนเวลาที่แน่นอนสำหรับการอัปเดตของฉันแล้ว ปัญหาคือฉันไม่ได้ทำการแก้ไขที่แนะนำสำหรับการเรนเดอร์ ผลที่สุดคือฉันได้รับสองเท่าหรือข้ามเฟรมหากอัตราการแสดงผลของฉันไม่ตรงกับอัตราการอัปเดตของฉัน สิ่งเหล่านี้สามารถสังเกตเห็นได้ชัดเจน ดังนั้นฉันจึงต้องการเพิ่มการแก้ไขในเกมของฉัน - และฉันสนใจที่จะรู้ว่าคนอื่นมีโครงสร้างข้อมูลและรหัสของพวกเขาเพื่อสนับสนุนสิ่งนี้อย่างไร เห็นได้ชัดว่าฉันจะต้องจัดเก็บ (ที่ไหน / อย่างไร?) ข้อมูลสถานะเกมสองชุดที่เกี่ยวข้องกับโหมดแสดงภาพของฉันเพื่อให้สามารถแก้ไขระหว่างพวกเขาได้ นอกจากนี้ - นี่เป็นสถานที่ที่เหมาะสำหรับเพิ่มเธรด ฉันคิดว่าเธรดการอัปเดตสามารถทำงานในสถานะเกมที่สามได้โดยปล่อยให้อีกสองสำเนาเป็นแบบอ่านอย่างเดียวสำหรับเธรดการแสดงผล (นี่เป็นความคิดที่ดีใช่ไหม) มันดูเหมือนว่าจะมีสองหรือสามรุ่นของรัฐของเกมสามารถนำประสิทธิภาพการทำงานและ - ไกลที่สำคัญกว่า - ความน่าเชื่อถือและผลิตพัฒนาปัญหาเมื่อเทียบกับมีเพียงรุ่นเดียว ดังนั้นฉันจึงสนใจเป็นพิเศษในวิธีการลดปัญหาเหล่านั้น โดยเฉพาะอย่างยิ่งผมคิดว่าเป็นปัญหาของวิธีจัดการกับการเพิ่มและลบวัตถุออกจากสถานะเกม ในที่สุดดูเหมือนว่าบางรัฐอาจไม่จำเป็นต้องทำการเรนเดอร์โดยตรงหรืออาจจะยากเกินกว่าที่จะติดตามเวอร์ชั่นต่าง ๆ ของ (เช่น: เอ็นจิ้นฟิสิกส์ของบุคคลที่สามที่เก็บสถานะเดี่ยว) - ดังนั้นฉันสนใจที่จะทราบ ผู้คนจัดการข้อมูลประเภทนั้นภายในระบบดังกล่าว

4
MMORPG ขนาดใหญ่อัพเดตฟิสิกส์บ่อยแค่ไหน? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เท่าที่ฉันเข้าใจเกมใหญ่ส่วนใหญ่ใช้การประทับเวลาคงที่เพื่อให้มีการจำลองที่เสถียร เกี่ยวกับเซิร์ฟเวอร์เกมพวกเขากำหนดอัตราเฟรมหรือไม่ หรือพูดอีกวิธีหนึ่งพวกเขามักจะใช้การประทับเวลาคงที่ในเวลาใด ฉันรู้ว่าหลายคนจะพูดว่า: "เร็วเท่าที่พวกเขาสามารถหนีไปได้" ฉันต้องการทราบว่ารวดเร็วแค่ไหนหากคุณมีประสบการณ์ตรงในการสร้าง MMORPG

1
การแยกโลจิคัล / อัพเดตจากโค้ดการแสดงผล / การวาดในเธรดเดี่ยวโดยใช้โหมดสลีป
ฉันได้อ่านแล้วว่าความเร็วของวัตถุในเกมไม่ควรถูกขัดขวางโดย FPS แต่ควรขึ้นอยู่กับเวลา ฉันจะแยกโค้ดอัปเดต / วาดเพื่อเพิ่มประสิทธิภาพได้สูงสุดโดยไม่ จำกัด อัตราการวาดและให้อัตราการอัปเดตตรรกะอย่างต่อเนื่องตามเวลาได้อย่างไร รหัสหลอกปัจจุบันของฉันเป็นดังนี้ loop { draw(); if (ticksElapsed() > 100) { update(); ticks+= ticksElapsed(); } } ปัญหาคือรหัสการวาดภาพเป็นอุปสรรคต่อประสิทธิภาพของอัตราการอัปเดต () และมันใช้ cpu 100% เพราะถ้าการนอนหลับถูกโยนทิ้งมันจะสลัดฟังก์ชันการวาดภาพ / ลอจิกออก ฉันใช้ SDL ด้วยและดูเหมือนจะไม่มีตัวเลือก vsync ฉันเคยได้ยินคำศัพท์ที่แก้ไขแล้วและเปลี่ยนแปลงเวลาได้อย่างรวดเร็ว แต่ฉันไม่แน่ใจว่าจะทำอย่างไรกับการนอนหลับ ()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.