เราจะช่วยโลกแห่งขั้นตอนได้อย่างไร?


17

ฉันเพิ่งอ่านเกี่ยวกับวิธีการสร้างโลกแห่งกระบวนการ ... แต่ฉันจะบันทึกได้อย่างไร

ในเกมอย่างผู้ใช้ Terraria หรือ Minecraft สามารถปรับเปลี่ยนภูมิทัศน์ได้อย่างอิสระ แต่โลกนั้นไม่สามารถสร้างขึ้นมาใหม่ได้จากเมล็ดเริ่มต้น เทคนิคใดที่ใช้ในการบันทึกโลกที่มีขั้นตอน แต่สามารถแก้ไขได้?

คำตอบ:


21

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

จากนั้นเมื่อโหลดเกมที่บันทึกไว้คุณทำสิ่งต่อไปนี้:

  1. สร้างส่วนหนึ่งของโลกที่คุณกำลังเยี่ยมชมเป็นขั้นตอน
  2. ใช้คำสั่งที่บันทึกไว้หรือเขียนทับองค์ประกอบที่สร้างขึ้นด้วยคำสั่งที่บันทึกไว้

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


2
นอกเหนือจากการดัดแปลงเขาอาจต้องบันทึกเมล็ดพันธุ์ที่ใช้ในการสร้างโลกแห่งขั้นตอน ;-)
bummzack

@bummzack ใช่แน่นอนฉันลืมพูดถึงเพราะมันชัดเจน :-) ฉันจะแก้ไขคำตอบของฉัน
Marton

10
ฉันไม่แน่ใจว่าการสร้างโลกขึ้นมาใหม่จากเมล็ดเป็นแนวคิดที่ดีที่สุด การสร้างโลกมักจะเกี่ยวข้องกับอัลกอริธึมที่ซับซ้อนดังนั้นจึงต้องใช้เวลา: เราสร้างโลกสุ่มเพื่อไม่ให้ประหยัดพื้นที่โดยทั่วไป แต่เพื่อประโยชน์จากการสุ่ม ดังนั้นฉันจะพิจารณาว่าการประหยัดทั้งโลกในรูปแบบไบนารีจะมีประสิทธิภาพมากขึ้น
Jonathan Connell

2
ดังนั้นคุณกำลังบอกว่าจะช่วยโลกที่สร้างขึ้นตามขั้นตอนคุณสร้างมันขึ้นมาแล้วบันทึกมัน? นี่ไม่ใช่คำตอบที่สมบูรณ์มาก
MichaelHouse

2
@ Random832 Minecraft ไม่บันทึกโลกในรูปแบบไบนารีมากกว่า regenerating มันจากเมล็ดและทบทวนการปรับเปลี่ยน เพื่อหลีกเลี่ยงปัญหาในการช่วยโลกทั้งโลก Minecraft เพียงแค่บันทึกชิ้นส่วนที่ถูกสร้างขึ้นมา ในขณะที่คุณสำรวจโลกต่อไปเกมบันทึกของคุณจะใหญ่ขึ้น
Joseph Mansfield

8

การบันทึกโลกที่สร้างขึ้นแบบโพรซีเดอร์นั้นเหมือนกับการบันทึกข้อมูลแผนที่ย่อย

คุณอาจต้องการช่วยโลกในรูปแบบไบนารี่โดยสมมติว่าโลกสร้างขึ้นด้วยกระเบื้องประเภทต่างๆคุณจะต้อง:

  1. ตัดสินใจเลือกจำนวนประเภทของไพ่ที่แตกต่างกัน (ขึ้นอยู่กับว่าคุณต้องการบิตมากกว่าหรือน้อยกว่าในการแสดงแต่ละไทล์)
  2. กำหนดความกว้างและความสูงของโลกที่เข้าชม (แก้ไข)
  3. แสดงไทล์โลกโดยเรียงต่อกันจากเรียงต่อกันด้านบนซ้ายสุด (รวมถึงท้องฟ้า) เรียงต่อกันเป็นเรียงต่อกันที่ด้านล่างขวาสุด
  4. หากคุณต้องการประหยัดพื้นที่ให้ใช้ DEFLATE หรืออัลกอริทึมที่คล้ายกันเพื่อบีบอัด 2d-array (แสดงเป็น 1-d) http://en.wikipedia.org/wiki/DEFLATE
  5. ใช้ไฟล์ I / O ที่เหมาะสมสำหรับ API ของคุณเพื่อเก็บข้อมูลบนดิสก์

คุณสามารถใช้วิธีการเดียวกันเพื่อบันทึกแผนที่ตาม voxel ด้วย

การจัดรูปแบบแผนที่ตามจุดยอดนั้นซับซ้อนมากขึ้น

คุณต้องการให้ฉันอธิบายรายละเอียดของเรื่องนั้นหรือไม่?


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

4

เกี่ยวกับ Minecraft โลกใช้ voxels ดังนั้นมันค่อนข้างง่ายที่จะบันทึกข้อมูลเพิ่มเติมที่นี่:

http://www.minecraftwiki.net/wiki/Region_file_format

http://www.minecraftwiki.net/wiki/Level_Format

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


3

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

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

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

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