เอ็นจิ้นผู้เล่นเดี่ยวควรปฏิเสธข้อมูลที่ไม่ถูกต้องอย่างไร


11

ในเกมที่มีผู้เล่นคนเดียวเมื่อพยายามสร้างเอนทิตีจากส่วนประกอบที่ระบุในสคริปต์ภายนอกสิ่งที่คุณคิดว่าน่าจะเกิดขึ้นได้มากขึ้นเมื่อองค์ประกอบหนึ่งถูกสร้างขึ้นอย่างไม่ดี:

  • เครื่องยนต์ควรข้ามส่วนประกอบนั้นและปล่อยให้เอนทิตีอยู่ในโลกของเกมที่มีส่วนประกอบที่เขียนได้ดีหรือไม่?
  • หรือมันจะไม่เพิ่มเอนทิตีในโลกเลยถ้ามี แต่ส่วนประกอบอย่างใดอย่างหนึ่งที่มีรูปแบบไม่ดี

หมายเหตุฉันไม่ได้พูดถึงการบันทึกข้อผิดพลาด - ซึ่งควรเกิดขึ้นโดยไม่พูดอะไร - เกี่ยวกับสิ่งที่ควรเกิดขึ้นกับเอนทิตี


เรากำลังพูดถึงผู้เล่นเดี่ยวหรือผู้เล่นหลายคน?
o0 '

@Lohoris ผู้เล่นเดี่ยว
พอล Manta

2
ในฐานะที่เป็นคำตอบส่วนใหญ่ได้พาดพิงถึงผู้ชมของคุณคือใคร? คุณกำลังทำเกมที่ปรับเปลี่ยนได้หรือคุณกำลังพูดถึงเพื่อการพัฒนาภายใน?
Tetrad

@ Tetrad ฉันต้องการให้เกมนี้เป็นมิตรกับ modder มากที่สุด
พอล Manta

คำตอบ:


11

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


2
ฉันคิดว่านี่เป็นขั้วคู่ที่ยอดเยี่ยมโดยแยกความแตกต่างระหว่างข้อผิดพลาดของผู้ใช้กับข้อผิดพลาดของนักพัฒนา มันสมเหตุสมผลด้วยเหตุผลเดียวกันกับที่ข้อผิดพลาดของคอมไพเลอร์โดยทั่วไปแล้วค่อนข้างง่ายต่อการแก้ไข แต่ข้อผิดพลาดรันไทม์ / ความหมายเป็นปีศาจ
jhocking

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

7

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

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

ดังนั้นการสาธิตของคุณยังไม่พร้อมในเวลา 2PM และนักลงทุนของคุณสงสัยว่าทำไมคุณถึงไม่สามารถเป็นศัตรูในเกมและโครงการของคุณก็ถูกปิด

หรือคุณเลือกตัวเลือกที่คุณบันทึกความล้มเหลว แต่พยายามต่อไปและเกมเล่นได้ดียกเว้นเอฟเฟกต์การสะกดของศัตรูบางตัวไม่ปรากฏ - แต่นักลงทุนไม่ทราบว่าควรจะมีลักษณะอย่างไรต่อไปดังนั้นพวกเขาจึงไม่ แจ้งให้ทราบ

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


1
ฉันคิดว่าสถานการณ์ที่คุณเสนอสามารถป้องกันได้ด้วยระบบควบคุมแหล่งที่ดี ในสถานการณ์ของคุณศิลปินได้ "ทำลายโครงสร้าง" ทุกคนที่ทำงานกับ shader ที่เสียควรจะสามารถหมุน shader กลับไปเป็นรุ่นก่อนหน้าได้จนกว่าปัญหาจะถูกแยกออก
John McDonald

1
@ John ในขณะที่ต้องมีการควบคุมแหล่งข้อมูลที่ดีและบางครั้งจำเป็นต้องย้อนกลับเพื่อเรียกคืนส่วนที่เหลือของโครงการกลับสู่สถานะการทำงานจนกว่าความล้มเหลวจะได้รับการแก้ไขภายในเครื่อง แต่ก็ไม่ค่อยมีประโยชน์ในฐานะกลไกป้องกันและไม่ควรเชื่อถือ .

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

@ Joe Wreschnig: นั่นสมเหตุสมผล ดังนั้นฉันคิดว่าจะต้องมีจุดที่ความล้มเหลวอย่างรวดเร็วนั้นไม่ใช่สินทรัพย์อีกต่อไป ไม่ว่าจะเป็นคนประเภทที่ใช้หรือในโครงการที่มีขนาดที่แน่นอน ฉันคิดว่ามันขึ้นอยู่กับคนในทีมที่จะตัดสินใจว่าอะไรเหมาะกับพวกเขา
John McDonald

2
ฉันไม่แน่ใจว่าจะล้มเหลวอย่างรวดเร็วซึ่งเป็นคำถามที่เกี่ยวกับสิ่งที่เป็นสินทรัพย์ แม้แต่คนเดียว "ทีม" บางทีฉันอาจไม่ต้องการจัดการกับรหัส shader เพราะฉันต้องทำในระดับนี้ แน่นอนว่าการจัดการข้อผิดพลาดที่ดีและบันทึกข้อผิดพลาดทั้งหมด แต่ฉันเกือบจะมีความคิดที่ดีกว่าของสิ่งที่สำคัญตอนนี้ตอนนี้กว่าที่ฉันทำเมื่อฉันเขียนรหัสข้อผิดพลาดหกเดือนที่ผ่านมา

1

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

อย่างใดคุณควรตัดสินใจสิ่งที่ผิดพลาดควรจะเป็นอันตรายถึงชีวิตการป้องกันที่จะเพิ่มเกมและซึ่งสามารถออกเป็นคำเตือน

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


0

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

void setValue(int value) {
    if (value < MIN_VALUE) {
       log(value + " is too low, using " + MIN_VALUE);
       value = MIN_VALUE;
    }
    if (value > MAX_VALUE) {
       log(value + " is too high, using " + MAX_VALUE);
       value = MAX_VALUE;
    }
}

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

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


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

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