Level Editor + Game -> การเรนเดอร์โค้ด / เกมโดยเฉพาะ


14

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

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

หรือมีวิธีที่ดีกว่า / ง่ายกว่าในการทำเช่นนี้?

คำตอบ:


13

คุณจะต้องแยกรหัสของคุณออกเป็นโครงการแยกต่างหาก (ในโซลูชันเดียวกัน) โดยปกติคุณจะมีการตั้งค่าต่อไปนี้:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

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

ถ้าพวกเขาจะอ้างอิงซึ่งกันและกันการแยกจะไร้ประโยชน์

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

การแยกนี้ยังหมายความว่าคุณสามารถใช้เทคโนโลยี Windows เท่านั้นเช่น WPF ในโปรแกรมแก้ไขของคุณในขณะที่เกมของคุณยังคงสามารถกำหนดเป้าหมาย Windows และ XBLIG ได้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ XNA ภายในสภาพแวดล้อม WPF ดูลิงค์นี้: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- ของ -a-WPF-Application.aspx


ขอบคุณ! มองไปรอบ ๆ และฉันพบสิ่งนี้ - create.msdn.com/en-US/education/catalog/sample/ … - ดูเหมือนว่า WinForms ได้รับการสนับสนุนดีกว่า WPF!
Utkarsh Sinha

เฮ้จริง แต่ตัวอย่างนั้นมาจากปี 2008 ก่อนที่ WPF จะลงจากพื้นจริงๆ ฉันได้เปลี่ยนจาก WinForms เป็น WPF เมื่อปีที่แล้วและฉันจะไม่เปลี่ยนโลก :) หากคุณต้องการให้เข้ากันได้กับตัวอย่างนั้นคุณสามารถใช้ WinFormsControlHost ในแอพ WPF ได้เสมอ :)
Roy T.

4

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

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

การรักษาส่วนประกอบในชุดประกอบแยกต่างหากจะช่วยกระตุ้นการแยก ...

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