BerickCook แสดงความคิดอย่างถูกต้อง ออกจากการคำนวณว่าพวกเขาอยู่ที่ไหนถ้าพวกเขาทำงานอย่างถูกต้องในขณะนี้
หากคุณสามารถทำการคำนวณก่อนและคุณแน่ใจว่าคุณจะไม่ต้องการมันในช่วงกลางเกมจากนั้นทำมันก่อน อื่นทำหลังจากโหลด หากการคำนวณระหว่างเกมไม่เป็นที่สังเกตคุณก็สามารถทำได้ หากในบางจุดความซับซ้อนวิวัฒนาการและการคำนวณเริ่มหนักเกินไปที่จะเพิ่มประสิทธิภาพ
แต่สิ่งหนึ่งที่: หากการคำนวณของคุณถูกนำไปใช้ในการเล่นเกมช่วงกลางคุณสามารถบังคับให้พวกเขาเล่นระหว่างการโหลดได้
มีโซลูชั่นมากมาย:
- คำนวณ / โหลดพา ธ ระหว่างการสร้าง / โหลดระดับ
- ใช้เธรดที่สองเพื่อคำนวณเส้นทาง
- เพิ่มประสิทธิภาพอัลกอริทึมของคุณ
- ใช้ระบบขัดจังหวะหากคุณไม่สามารถเข้าถึงเธรด
ฉันได้เห็นและใช้ตัวเลือกสุดท้ายในเกมตลาดแบบมวลชน เพียงให้แน่ใจว่าคุณบันทึกข้อมูลทั้งหมดที่จำเป็นสำหรับการคำนวณเพื่อดำเนินการต่อและตรวจสอบเวลา / การดำเนินการที่เหลืออยู่ในระหว่างการคำนวณอย่างสม่ำเสมอ
ระบบที่ขัดจังหวะสามารถให้การแก้ปัญหาเบื้องต้นและบางส่วนที่สามารถใช้เหตุการณ์ก่อนการคำนวณสิ้นสุดขึ้นอยู่กับกรณีของคุณ
แก้ไข : ตอบ @Keeper
"อัลกอริธึมขัดจังหวะ" มีประโยชน์เพียงเพราะข้อ จำกัด ที่เรามี โดยพื้นฐานแล้วเรารู้จักกันในเรื่องการขาดมัลติเธรด
จนถึงจุดหนึ่งเรามีเกมที่ AI ต้องคำนวณการเคลื่อนไหวจำนวนมากตามพจนานุกรมหลายเล่ม ในระหว่างการคำนวณภาพเคลื่อนไหวทั้งหมดจะหยุดลงเนื่องจากพจนานุกรมถูกขยายด้วยข้อมูลที่มากขึ้นและชุดข้อมูลที่เก็บข้อมูลนั้นถูกเปลี่ยนและมีประสิทธิภาพน้อยลงเมื่อเกมถูกดัดแปลงสำหรับเกมแบบผู้เล่นหลายคน เรามีเพียงเธรดเดียวที่พร้อมใช้งานสำหรับลูปเกม (ความจำเป็นในการเป็นรหัสมัลติแพลตฟอร์มต้องทำงานบนแพลตฟอร์มที่รองรับทั้งหมด) ณ จุดนี้มันได้ตัดสินใจที่จะทำลายอัลกอริทึมการคำนวณเพื่อให้เราสามารถขัดจังหวะมัน ดังนั้นเราจึงไม่สามารถใช้ระบบเรียกซ้ำที่เกิดขึ้นเนื่องจากไม่สามารถบันทึกตัวแปรได้ ฟังก์ชั่นถูกแทนที่ด้วยวัตถุซึ่งเพียงเก็บตัวแปรและพอยน์เตอร์ที่จำเป็นทั้งหมดไว้ในวัตถุแม่และลูก ฉันไม่ '
- บันทึกสถานะของการคำนวณปัจจุบัน
- ขัดจังหวะทั้งในตอนท้ายของวงหรือในระหว่างวง (เมื่อวัตถุลูกขัดจังหวะ)
- ออกเมื่อหมดเวลา
- กลับสู่ตำแหน่งที่หยุดการรีสตาร์ทลูปที่ดัชนีด้านขวาหรือเรียกวัตถุย่อยที่อยู่ด้านบนสุดของสแตกลูก
- ทำความสะอาดทุกอย่างหากการคำนวณถูกขัดจังหวะ
- ให้ผลลัพธ์ที่ดีที่สุดบางส่วน
เฉพาะการดำเนินการที่แพงที่สุดเท่านั้นที่ถูกแยกออกเป็นวัตถุแยกต่างหากและใช้เวลาพอสมควรในการหาสถานที่ที่เหมาะสมที่เราสามารถหยุดการคำนวณได้ แต่ในที่สุดมันก็ใช้งานได้ดีมาก
เราสูญเสียประสิทธิภาพการทำงาน แต่การรับรู้ประสิทธิภาพดีขึ้นมากสำหรับผู้ใช้เนื่องจากภาพเคลื่อนไหววิ่งได้อย่างราบรื่นบนทุกแพลตฟอร์มจากนั้นทุกแพลตฟอร์มสามารถใช้พจนานุกรมที่มีขนาดใหญ่ขึ้นได้โดยไม่ต้องทนทุกข์จากภาพเคลื่อนไหวที่ขาด ๆ หาย ๆ นอกจากนี้ยังช่วยให้เราสามารถเรียกใช้หลาย ๆ กรณีพร้อมกันเมื่อเราต้องการในภายหลัง
แน่นอนว่าตอนนี้บน iPhone และ iPad เกมไม่ต้องการสิ่งนี้การใช้เธรดที่สองจะเหมาะสมที่สุด แต่ฉันสงสัยว่ารหัสยังอยู่ที่นั่น