นี่คือโพสต์เก่า แต่ก็ยังปรากฏขึ้นดังนั้นต้องการเพิ่ม 2 เซนต์ของฉันที่นี่
ข้อมูลรายการแรกที่ควรเก็บไว้ใน UI / display thread vs logic thread ในเธรด UI คุณอาจรวมถึง 3d mesh, พื้นผิว, ข้อมูลแสงและสำเนาข้อมูลตำแหน่ง / การหมุน / ทิศทาง
ในเธรดเกมลอจิกคุณอาจต้องใช้ขนาดวัตถุของเกมในแบบ 3 มิติ, ขอบเขตดั้งเดิม (ทรงกลม, ลูกบาศก์), ข้อมูล 3d mesh แบบง่าย (สำหรับการชนโดยละเอียดเช่น), คุณลักษณะทั้งหมดที่มีผลต่อการเคลื่อนไหว / พฤติกรรมเช่นความเร็ววัตถุ และข้อมูลตำแหน่ง / การหมุน / ทิศทาง
หากคุณเปรียบเทียบสองรายการคุณจะเห็นว่าต้องคัดลอกข้อมูลตำแหน่ง / การหมุน / ทิศทางเท่านั้นจากตรรกะไปยังเธรด UI คุณอาจต้องใช้รหัสความสัมพันธ์บางอย่างเพื่อตรวจสอบว่าเกมนี้เป็นข้อมูลของวัตถุใด
วิธีที่คุณทำขึ้นอยู่กับภาษาที่คุณใช้ด้วย ใน Scala คุณสามารถใช้ Software Transactional Memory ใน Java / C ++ การล็อค / การซิงโครไนซ์บางชนิด ฉันชอบข้อมูลที่ไม่เปลี่ยนรูปแบบดังนั้นฉันมักจะกลับวัตถุที่เปลี่ยนรูปแบบไม่ได้ใหม่สำหรับการปรับปรุงทุกครั้ง นี่เป็นบิตของหน่วยความจำเสีย แต่ด้วยคอมพิวเตอร์ที่ทันสมัยมันไม่ใช่เรื่องใหญ่อะไร อย่างไรก็ตามหากคุณต้องการล็อคโครงสร้างข้อมูลที่ใช้ร่วมกันคุณสามารถทำได้ ตรวจสอบคลาส Exchanger ใน Java โดยใช้บัฟเฟอร์อย่างน้อยสองรายการสามารถเร่งความเร็วของสิ่งต่างๆ
ก่อนที่คุณจะเข้าสู่การแชร์ข้อมูลระหว่างเธรดจะต้องคำนวณจำนวนข้อมูลที่คุณต้องการส่งผ่าน หากคุณมีการแบ่งพาร์ติชันสามมิติในพื้นที่สามมิติและคุณสามารถเห็นวัตถุเกม 5 รายการจากทั้งหมด 10 วัตถุแม้ว่าตรรกะของคุณจะต้องอัปเดตทั้ง 10 รายการคุณต้องวาดเฉพาะ 5 รายการที่คุณเห็น สำหรับการอ่านเพิ่มเติมลองดูที่บล็อกนี้:
http://gameprogrammingpatterns.com/game-loop.html
สิ่งนี้ไม่เกี่ยวกับการซิงโครไนซ์ แต่มันแสดงให้เห็นว่าตรรกะของเกมถูกแยกออกจากการแสดงผลอย่างไรและความท้าทายใดที่คุณต้องเอาชนะ (FPS) หวังว่าจะช่วยได้
เครื่องหมาย