เวลาในการโหลดเกมล่วงหน้าเทียบกับเวลาในการโหลดเกม


9

ฉันกำลังพัฒนาเกมที่มีเขาวงกตสุ่มรวมอยู่ด้วย
มีสิ่งมีชีวิต AI บางอย่างที่ซุ่มซ่อนเขาวงกต และฉันต้องการให้พวกเขาไปในเส้นทางบางอย่างตามรูปร่างเขาวงกต

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

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

ข้อเสนอแนะความคิดเห็นความคิดเห็นใด ๆ จะเป็นประโยชน์

แก้ไข:

สำหรับตอนนี้ขอpเป็นจำนวนของเส้นทางที่คำนวณล่วงหน้าสิ่งมีชีวิตมีความน่าจะเป็นที่1/pจะใช้เส้นทางใหม่ (ซึ่งหมายถึงการคำนวณเส้นทาง) แทนที่จะเป็นเส้นทางที่มีอยู่
สิ่งมีชีวิตไม่ได้เริ่มลาดตระเวนจนกว่าเส้นทางจะถูกคำนวณอย่างสมบูรณ์ดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับการที่เขาถูกสังหารในกระบวนการ


8
ณ จุดนี้มันจะเป็นการเพิ่มประสิทธิภาพล่วงหน้า ฉันจะปล่อยให้มันเป็น - จนกว่าจะมีปัญหา
John McDonald

3
และหากพูดถึงเล็กน้อยกับ @JohnMcDonald หากคุณสามารถคำนวณเส้นทางเหล่านี้ได้ในช่วงกลางเกมและไม่สามารถสังเกตเห็นได้ว่าพวกเขามีส่วนร่วมมากน้อยแค่ไหนในเวลาโหลด
James

คำตอบ:


6

BerickCook แสดงความคิดอย่างถูกต้อง ออกจากการคำนวณว่าพวกเขาอยู่ที่ไหนถ้าพวกเขาทำงานอย่างถูกต้องในขณะนี้

หากคุณสามารถทำการคำนวณก่อนและคุณแน่ใจว่าคุณจะไม่ต้องการมันในช่วงกลางเกมจากนั้นทำมันก่อน อื่นทำหลังจากโหลด หากการคำนวณระหว่างเกมไม่เป็นที่สังเกตคุณก็สามารถทำได้ หากในบางจุดความซับซ้อนวิวัฒนาการและการคำนวณเริ่มหนักเกินไปที่จะเพิ่มประสิทธิภาพ

แต่สิ่งหนึ่งที่: หากการคำนวณของคุณถูกนำไปใช้ในการเล่นเกมช่วงกลางคุณสามารถบังคับให้พวกเขาเล่นระหว่างการโหลดได้

มีโซลูชั่นมากมาย:

  • คำนวณ / โหลดพา ธ ระหว่างการสร้าง / โหลดระดับ
  • ใช้เธรดที่สองเพื่อคำนวณเส้นทาง
  • เพิ่มประสิทธิภาพอัลกอริทึมของคุณ
  • ใช้ระบบขัดจังหวะหากคุณไม่สามารถเข้าถึงเธรด

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

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


แก้ไข : ตอบ @Keeper

"อัลกอริธึมขัดจังหวะ" มีประโยชน์เพียงเพราะข้อ จำกัด ที่เรามี โดยพื้นฐานแล้วเรารู้จักกันในเรื่องการขาดมัลติเธรด

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

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

เฉพาะการดำเนินการที่แพงที่สุดเท่านั้นที่ถูกแยกออกเป็นวัตถุแยกต่างหากและใช้เวลาพอสมควรในการหาสถานที่ที่เหมาะสมที่เราสามารถหยุดการคำนวณได้ แต่ในที่สุดมันก็ใช้งานได้ดีมาก

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

แน่นอนว่าตอนนี้บน iPhone และ iPad เกมไม่ต้องการสิ่งนี้การใช้เธรดที่สองจะเหมาะสมที่สุด แต่ฉันสงสัยว่ารหัสยังอยู่ที่นั่น


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

@ ผู้รักษาฉันหวังว่าฉันจะตอบคำถามของคุณเกี่ยวกับส่วนที่ขัดจังหวะ มันเป็นความเจ็บปวด แต่ต้องทำและไม่เกี่ยวข้องกับระบบที่ทันสมัยที่สุด
โคโยตี้

แม้ว่าตอนนี้ฉันจะไม่ใช้วิธีนี้ในตอนนี้ แต่คุณลืมตาฉันไปสู่สิ่งใหม่ คำตอบของคุณสมควรได้รับการยอมรับ
ผู้รักษา

8

สำหรับตอนนี้ตั้งแต่การคำนวณเส้นทางกลางเกมไม่เป็นที่สังเกตนั่นเป็นวิธีที่ดีที่สุด หาก / เมื่อถึงจุดที่การเล่นเกมถูกขัดจังหวะโดยการคำนวณแล้วสลับไปที่การคำนวณเส้นทางต่อก่อนที่จะโหลดระดับ

เวลาในการโหลดครั้งแรกที่ยาวกว่านั้นจะถูกลืมเลือน แต่โดยทั่วไปความผันผวนของ FPS แบบสุ่มระหว่างการเล่นไม่ใช่


2

ความเป็นไปได้อย่างหนึ่งที่คุณต้องการคือการย้ายการคำนวณไปยังเธรดที่สองเนื่องจากพีซีเกือบทุกเครื่องมีซีพียูมากกว่าหนึ่งแกนในทุกวันนี้

กระบวนการพื้นฐานจะเป็น:

  • เมื่อสิ่งมีชีวิตที่ร้องขอเส้นทางเพิ่มการร้องขอไปยังคิวคำขอปลอดภัยเธรดและส่งสัญญาณเธรด
  • สิ่งมีชีวิตที่ไม่ได้ใช้งานในขณะที่รอเธรดที่จะป๊อปรายการออกจากคิวประมวลผลและวางลงในรายการที่เสร็จสมบูรณ์
  • แต่ละเฟรมตรวจสอบรายการที่เสร็จสมบูรณ์จากเธรดหลักและกำหนดพา ธ ที่สมบูรณ์ให้กับสิ่งมีชีวิต

คุณต้องระวังกรณีขอบพิเศษบางอย่างเช่นกัน (เช่นถ้าสัตว์ตายก่อนดำเนินการตามคำขอ)


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