การออกแบบระดับในเกมด้วย XNA


10

ฉันสงสัยเกี่ยวกับการออกแบบระดับในเกม สถานการณ์ปัจจุบันของฉันหมุนรอบ Tiled - ฉันมีเลเยอร์ต่าง ๆ ที่มีประเภทของวัตถุต่าง ๆ (สำหรับทุกคนที่ไม่คุ้นเคยกับ Tiled วัตถุจะไม่มีอะไรมากไปกว่าการประสานงานกับคุณสมบัติตามอำเภอใจที่กำหนดไว้)

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

คำตอบ:


8

ฉันถือว่าไฟล์แผนที่ของคุณได้รับการดำเนินการผ่านทาง Content Pipeline แล้วโหลดตอนรันไทม์ด้วย Content.Load คุณมีสองทางเลือก:

  • บันทึกแผนที่ของคุณเป็นไฟล์ XML ผ่าน IntermediateSerializer.Serialize จากนั้นที่รันไทม์คุณสามารถอ่านได้ด้วย IntermediateSerializer.Deserialize เพื่อดูการเปลี่ยนแปลง
  • นี่เป็นวิธีที่ยากกว่านั่นคือเรียก MSBuild ตอนรันไทม์เพื่อคอมไพล์ไฟล์ของคุณให้เป็น XNB ที่เหมาะสมและทำการโหลดซ้ำด้วย ContentManager ตัวอย่างนี้ทำอย่างนั้น

ระหว่างสองคนนี้ฉันแน่ใจว่าฉันจะสามารถแยกบางอย่างออก ขอบคุณ!
Christopher Horenstein

2

คุณสามารถใช้Karvonite ได้หากคุณต้องการทำให้เรื่องนี้ก้าวไปอย่างรวดเร็ว

มันเป็นกรอบการคงอยู่ที่คล่องตัว ฉันไม่แน่ใจว่าเวอร์ชั่นใหม่จะใช้งานได้บน windows phone 7 หรือ xbox

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

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

ฉันคิดว่ามีตัวอย่างของวิธีการสร้างเนื้อหาที่รันไทม์บนเว็บไซต์ของชมรมผู้สร้าง XNA มันอาจไม่ได้ถูกสร้างขึ้นด้วยกรอบล่าสุด ด้วยวิธีนี้คุณสามารถเก็บรหัสเดิมของคุณได้หากคุณใช้การส่งเนื้อหาไปแล้ว นี่คือลิงค์: Winform Series 2: การโหลดเนื้อหา


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

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

1
คุณยังสามารถดูโครงการนี้ใน codeplex เพื่อเป็นตัวอย่างที่ดีกว่าของวิธีการสร้างเนื้อหานอกสตูดิโอภาพ ( xnadevru.codeplex.com/ ...... )
Michael Coleman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.