ฉันจะจัดการกับทรัพยากรที่ขาดหายไปได้อย่างไร


13

เกมของคุณคาดว่าจะโหลดเนื้อหาบางอย่าง แต่ไม่พบ สถานการณ์ควรจัดการอย่างไร? ตัวอย่างเช่น:

Texture* grassTexture = LoadTexture("Grass.png"); // returns NULL; texture not found
Mesh* car             = LoadMesh("Car.obj");      // returns NULL; 3D mesh not found

อาจถูกลบโดยผู้ใช้โดยไม่ได้ตั้งใจเสียหายหรือสะกดผิดในระหว่างการพัฒนา

คำตอบที่เป็นไปได้:

  • ยืนยัน (นึกคิดเฉพาะในระหว่างการพัฒนา)
  • ออกจากเกมอย่างสง่างาม
  • โยนข้อยกเว้นและพยายามจัดการ

วิธีไหนดีที่สุด


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

@Sidar ฉันชอบสิ่งที่คุณพูดมากกว่าคำตอบที่ได้รับการโหวตมากที่สุดบางทีคุณสามารถอธิบายได้ดีกว่าว่าคุณพยายามจะพูดอะไร
concept3d

ความผิดพลาดของความน่าเกลียดน่ากลัวคือบางครั้งมันก็ทำให้เกมแตกและผู้คนไม่สามารถเล่น / เริ่มเกมได้ ใน Steam ตัวอย่างเช่นหากเกมของคุณทำงานไม่ถูกต้องคุณสามารถตรวจสอบข้อมูลเกมได้ เมื่อสิ่งที่ดูเหมือนว่าเสียหาย / หายไป / เปลี่ยน Steam จะดาวน์โหลดไฟล์เหล่านั้นอีกครั้งโดยอัตโนมัติ ฉันไม่รู้ว่าพวกเขาทำได้อย่างไร แต่เห็นได้ชัดว่าพวกเขาตรวจสอบกับข้อมูลบางอย่าง บางทีรหัสแฮช ฉันไม่รู้จริงๆ แต่คุณควรมีสินทรัพย์ทดแทนมาตรฐาน (เพียงแค่พื้นผิวที่ระบุว่า "ข้อผิดพลาด" ในมันหรือบางสิ่งบางอย่าง)
Sidar

@Sidar ทำไมไม่จัดรูปแบบเป็นอย่างดีในคำตอบ?
concept3d

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

คำตอบ:


19

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


เห็นด้วยกับโพสต์นี้อย่างสมบูรณ์ คุณอาจต้องการทำสิ่งต่าง ๆ ในรุ่นวางจำหน่าย / กระจาย
Jonkel

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

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

1
@ concept3d - ฉันรู้ว่าอย่างน้อยซอร์สเอ็นจิ้นมีข้อผิดพลาดขนาดใหญ่ที่เห็นได้ชัด (ฉันเคยเห็นมันเป็นครั้งคราวในไคลเอนต์ทดสอบ Dota 2 กลับมาตอนที่พวกเขากำลังเพิ่มฮีโร่) ฉันยอมรับว่าถ้าขาดข้อมูลระดับใหญ่หายไปอาจเป็นข้อผิดพลาดที่ดีที่สุดโดยเฉพาะอย่างยิ่งในการสร้างการเผยแพร่ แต่สำหรับวัตถุประสงค์ในการดีบั๊กที่มีเครื่องหมายคำถามขนาดใหญ่ที่เต้นอยู่นั้นไม่ได้เลวร้ายเกินไป
Robert Fraser

6

หากคุณมีเนื้อหาความละเอียดต่างกันที่มีพื้นผิวเดียวกันคุณสามารถลองกอบกู้สถานการณ์โดยใช้ความละเอียดที่แตกต่างกัน

Texture* grassTexture;
try {
    grassTexture = LoadTexture("Grass.png");
} catch (WhateverExcaption e) {
    grassTexture = LoadTexture("Grass_512.png");
}

หากแม้ที่ล้มเหลวก็อาจจะมีเวลาในการประกันตัว


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