ด้วยคำตอบที่ยอดเยี่ยมของฌอนและบลูเกี่ยวกับข้อ จำกัด ของแพลตฟอร์มแบบฟิสิคัลและการตัดสินใจในเชิงปฏิบัติฉันจะขยายความคิดเห็นไปสู่แนวทางที่แตกต่าง:
ทำไมคุณน่าจะแค่โหลดระดับอย่างสมบูรณ์
ดังนั้นคุณจะได้รับ loadLevel () การโทรของคุณทำงานอย่างสมบูรณ์แบบใช่! คุณสตรีมในข้อมูลไฟล์ระดับและก้าวผ่านการสร้างโลกขึ้นอยู่กับมันสร้างวัตถุและโหลดพื้นผิวและเสียงตามที่คุณไป จากนั้นเมื่อเสร็จสิ้น - หรือทำ "เพียงพอ" เพื่อให้การเล่นเริ่มต้นคุณโทรไปที่ startPlay () และโลกของคุณจะถูกเปิดเผยและเพลงของคุณจะเริ่มเล่น
ตอนนี้เมื่อคุณทำระดับหรือหนีไปที่เมนูหรือออกจากเกมคุณจะเรียก unloadLevel () เพื่อเพิ่มทรัพยากรและหน่วยความจำทั้งหมดที่คุณถือไว้เพื่อให้ประสบการณ์ราบรื่น
ตอนนี้จะเกิดอะไรขึ้นเมื่อคุณต้องการเพิ่มคุณสมบัติ "ระดับการเริ่มต้นใหม่" ดี...
unloadLevel(currentLevel);
loadLevel(currentLevel);
startPlay();
และคุณทำเสร็จแล้ว! ไม่มีรหัสใหม่ฟังก์ชั่นที่เรียบง่ายเพียงไม่กี่สายและคุณได้เขียนและแก้ไขทุกอย่างแล้วตอนนี้คุณสมบัติการเริ่มระบบใหม่ที่ล้ำสมัยของคุณจะถูกข้ามไปจากรายการของคุณและอาจจะไม่พบอีกต่อไป เป็นคนที่ดีที่สุด! ย้ายรหัสไปยังฟังก์ชั่น restartCurrentLevel () และคุณสามารถพับโค้ดนั้นออกไปและไม่เคยดูอีกครั้ง - หลังจากแน่ใจแล้วว่ามีระดับในการรีสตาร์ทแน่นอน :)
แต่คุณสงสัยว่าสิ่งนี้ไม่ใช่ของเสียหรือไม่โหลดสิ่งที่คุณกำลังจะโหลดอีกครั้ง ถ้าระดับและทรัพยากรของคุณมีขนาดเล็กมากที่สุดที่คุณต้องได้รับคือเวลาโหลดไม่กี่วินาทีในแต่ละครั้งที่มีการเรียกว่า "เริ่มต้นใหม่" แม้ในระบบที่ช้า (และอาจเป็นสมาร์ทโฟนรุ่นเก่า) "การเพิ่มประสิทธิภาพก่อนกำหนด" คุณมีเวลาทำสิ่งที่ดีกว่า
อ่า แต่ตอนนี้ระดับของคุณเพิ่มขึ้นและพื้นผิวของคุณมีรายละเอียดมากขึ้นและเสียงประกอบได้รับการดึงใน 512kbps พร้อมช่องแยกสำหรับเสียงและดนตรีทุกชั้น (ดูเหมือนว่าเป็นความคิดที่ดีในเวลานั้น .. ) และบางอย่างเกี่ยวกับ "voxel ray ซึ่งขึ้นอยู่กับจุดกำเนิดของรัฐการติดตามการแปลงฟูริเยร์หลายมิติฟูริเยร์" ซึ่งคุณคิดว่าเป็นเพียงการสร้างขึ้นทั้งหมดและไม่ใช่ของจริงและการโหลดในระดับใช้เวลาสักพักแล้ว คุณได้ทดสอบกับคนจริงและพวกเขาแสดงความไม่พอใจในช่วงเวลาที่รอคอยซึ่งแย่กว่าเกมที่คล้ายคลึงกัน (คุณไม่คาดหวังว่าจะเป็นเมืองหลวง MMORPG ที่มีผู้เล่น 100 คนที่จะโหลดในเวลา <2 วินาทีใช่ไหม?) และมันก็เป็นปัญหา
ดังนั้นคุณจะเพิ่มประสิทธิภาพได้อย่างไร ทีนี้ถ้าการโหลดซ้ำระดับเป็นปัญหาแสดงว่าไม่โหลดปัญหาหรือไม่ หากคุณคิดว่ามันเป็นแค่การโหลดใหม่ทำไมบนโลกนี้ถึงมีคนโหลดระดับของคุณบ่อยกว่าที่พวกเขาโหลดในระดับแรก ฟังดูเหมือนปัญหาการเล่นเกมไม่ใช่ปัญหาด้านวิศวกรรมโค้ด ที่คิดว่าสนุกไปกับมันเพื่อโหลดในระดับที่มากกว่าและเหนือและมากกว่าอีกครั้งและเพียงแค่มีความประสงค์ที่มันเป็นได้เร็วขึ้นแทนที่จะหลีกเลี่ยงได้โดยสิ้นเชิง ?
แก้ไขปัญหาจริงก่อน!
แต่สมมติว่าเกมของคุณได้รับการออกแบบเพื่อให้คุณควรเริ่มต้นใหม่อย่างน้อยในบางครั้งและความเร็วในการโหลดนั้นนานพอที่จะให้สามารถทำได้หนึ่งครั้งและหลีกเลี่ยงไม่ได้อย่างเต็มที่ แต่คุณไม่ต้องการที่จะทำอีกครั้ง เกมนี้เป็นแบบไหนกันล่ะ? ดูเหมือนว่าเป็นปัญหาแปลก ๆ ... อาจเป็นเกมที่คล้ายกับพอร์ทัลที่มีความละเอียดสูงซึ่งมันสันนิษฐานว่าคุณกำลังสับสนปริศนาซ้ำ ๆ
ก่อนอื่นคุณต้องตระหนักว่าสิ่งนี้จะไม่เป็นเรื่องเล็กน้อย คุณจะต้องเขียนโค้ดใหม่ที่ยังไม่ได้ทดสอบอย่างสมบูรณ์และเป็น "ขึ้นอยู่กับสถานะ" เพื่อที่คุณจะไม่ได้รู้ว่าอะไรคือสิ่งที่จะไม่ถูกนำมาใช้ซ้ำระหว่างการเล่นระดับ มีองค์ประกอบสุ่มวางไข่พื้นผิวแปรปรวน (โครงกระดูกของคุณสวมเกราะในบางครั้งเท่านั้นหรือไม่) หรือองค์ประกอบที่เปลี่ยนแปลงอื่น ๆ ในระดับของคุณ? มีสิ่งที่แตกต่างจากเครื่องเล่นเช่นชุดหรือรุ่นที่กำหนดเองหรือสี / ประตู / กับดักหรือไม่?
คุณกำลังจะทำการเปรียบเทียบและจำนวนมาก คุณกำลังจะวนลูปผ่านองค์ประกอบระดับการเปรียบเทียบสิ่งที่จำเป็นกับสิ่งที่ถูกโหลดตอนนี้ (คุณจะทำอะไรกับสิ่งที่ถูกโหลดสำหรับระดับสุดท้าย แต่ไม่ใช่สำหรับสิ่งนี้ - ปล่อยพวกมันหรือยึดไว้เพื่อป้องกันอนาคต โหลด?) หากนี่เป็นเรื่องใหญ่สำหรับเกมของคุณคุณอาจต้องการเปลี่ยนรหัสการโหลด / ยกเลิกการโหลดของคุณเพื่อดูว่ามีบางอย่างถูกโหลดอยู่แล้วก่อนที่จะโหลด (ทำโค้ดเอนกประสงค์ แต่อาจแนะนำข้อบกพร่องใหม่ให้กับคุณสมบัติการทำงานก่อนหน้านี้ อย่างระมัดระวังปล่อยทรัพยากรที่จะไม่ใช้ในอนาคตอันใกล้) ถอนหายใจ
ไม่ว่าคุณจะทำอะไรถึงแม้ว่าเกมของคุณจะเรียบง่าย แต่คุณจะได้รับข้อผิดพลาดที่ไม่ชัดเจนซึ่งขึ้นอยู่กับสถานะ / ระดับผู้เล่นเมื่อระดับเริ่มต้นใหม่ซึ่งไม่ได้เกิดขึ้นกับคุณในการโหลดระดับในครั้งแรก ดังนั้นคุณจะได้เขียนอัปเดตเกมด้วยข้อความเช่น:
"การทิ้งหมวกกันน็อคบนระเบิดลงบนแผ่นกระเบื้องที่มีขีปนาวุธระเบิดอยู่ใกล้กับที่อยู่ในน้ำ 200 พิกเซลจะไม่ทำให้ข้อมูลในเกมของคุณเสียหายอีกต่อไปหรือทำให้เกมพัง"
เหตุผลที่แท้จริงเกมส่วนใหญ่ไม่สนใจ
คุณเคยสังเกตไหมว่าคนส่วนใหญ่เพียงทาสีหรือ drywall เหนือกำแพงที่มีอยู่แทนที่จะลอกลงไปที่ชั้นฐานหรือปูพรมบนพื้นไม้เนื้อแข็งแทนที่จะดึงขึ้นมา?
ความจริงง่ายๆคือมันทำงานได้มากขึ้นสำหรับรางวัลน้อยที่สุด การทาสีผนังที่มีอยู่ของคุณนั้นใช้งานได้ดีเกือบตลอดเวลาและคุณค่าของการฉีกพื้นไม้เนื้อแข็งมักจะน้อยหรือไม่มีเลย
เช่นเดียวกับในซอฟต์แวร์ตั้งแต่เกมจนถึงงานนำเสนอ Power Point - ถ้าคุณทำทุกอย่างจะหมดไปกับหน้าจอที่โหลดคนใช้เวลา 1% ในการมองแล้วนั่นจะเป็นเรื่องที่น่าเหลือเชื่อ ผลตอบแทนที่แย่มากในเวลาที่คุณลงทุน
และเกมส่วนใหญ่ก็ไม่ได้รบกวนและฉันก็มีปัญหาในการคิดเกมมากมายที่หน้าจอการโหลดทำให้เกมที่ดีมีค่าน้อยลงยกเว้นตัวอย่างสุดขั้วบางเกม ตัวอย่างสุดขั้วคือที่ซึ่งการปรับให้เหมาะสมสำหรับการโหลดในระดับที่เร็วขึ้นนั้นสมเหตุสมผลและนั่นเป็นเพียงเศษเสี้ยวของเกมเล็ก ๆ น้อย ๆ ที่เปิดตัวสู่สาธารณะและอาจเป็นเศษส่วนเล็ก ๆ ของเกมที่ไม่มีใครเห็น