สำหรับเอ็นจิ้นเกมที่กำหนดเองฉันควรทำอย่างไรถ้าข้อมูลหลักของฉันผิดรูปแบบหรือขาดหายไป


27

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

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

หากด้วยเหตุผลใดก็ตามความพยายามในการโหลดเนื้อหาบางรูปแบบในเครื่องมือที่กำหนดเองล้มเหลวฉันมีตัวเลือกอะไรบ้าง

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


7
ฉันใช้วิธีการที่คล้ายกันสำหรับเกมของฉัน จริง ๆ แล้วฉันได้สร้างแอพยูทิลิตี้เล็ก ๆ ขึ้นมาเพื่อสร้างไฟล์ข้อมูลเกมของฉันเพื่อหลีกเลี่ยงความผิดพลาดของมนุษย์ - วิธีนี้ฉันสามารถแก้ไขไฟล์ได้หากต้องการเปลี่ยนแปลงโดยไม่ต้องเขียน JSON 100,000 บรรทัดด้วยตนเอง
JDSweetBeat

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

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

คำตอบ:


44

บันทึกข้อผิดพลาดและออกอย่างสง่างาม

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


12

Byte56 กล่าวถึงหนึ่งตัวเลือก มีอย่างน้อยหนึ่งรายการ:

สมมติค่าเริ่มต้นและแสดงคำเตือน

ขึ้นอยู่กับลักษณะของข้อมูลของคุณอาจเป็นที่ยอมรับได้อย่างสมบูรณ์ในการสมมติค่าเริ่มต้นและเตือนผู้ใช้ว่า "เนื่องจากไฟล์ xxx ไม่สามารถโหลดได้เราจึงใช้ออบเจกต์ yyy ทั่วไป"


6

ขึ้นอยู่กับว่าเกิดเหตุการณ์นี้ขึ้นในระหว่างการพัฒนาหรือรีลีส

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

มันน่ารำคาญที่สุดหากโปรแกรมแสดงกล่องโต้ตอบข้อผิดพลาดและออกทุกครั้งและคุณต้องรีสตาร์ทซึ่งใช้เวลา 2-3 นาที เป้าหมายในการพัฒนาคือการถ่วงเวลาให้คุณ (ซึ่งเวลาคือสินทรัพย์ที่มีค่าที่สุด) ให้น้อยที่สุดเท่าที่จะทำได้
ตัวอย่างเช่นถ้าพื้นผิวขาดหายไปคุณจะต้องการเห็นสิ่งที่เหมือนกระดานหมากรุกสีแดงขาวบางทีอาจมีคำว่า "หายไป" สะกดอยู่ด้านบนของมันแทนพื้นผิวดังนั้นจึงเห็นได้ชัดว่ามีบางสิ่งแปลก ๆ . แต่คุณไม่ต้องการให้เกมออกจากเกมอย่างสง่างามหรือแม้แต่ชนกัน ข้อมูลที่ถูกตรวจสอบเกี่ยวกับสิ่งที่ขาดหายไปใน logfile ของคุณมีประโยชน์อย่างมาก

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

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

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


[1]ความจริงอาจดูแตกต่างคุณอาจพบว่าทรัพย์สินที่หายไปในชื่อ AAA ซึ่งผู้ผลิต "ควรรู้" แต่โดยปกติแล้วพวกเขาจะมีกำหนดส่งที่ไม่สมจริงและทีมที่มีขนาดใหญ่และมีการเปลี่ยนแปลง ทุกอย่างที่คุณจัดส่งจะผ่านท่ออัตโนมัติและรับประกันว่าจะสมบูรณ์

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