การแบ่งช่องว่างแบบ MVC ในเกม? [ปิด]


19

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

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

การจัดแบ่งประเภทนี้เป็นเรื่องปกติในเกมหรือไม่? ฉันควรพยายามที่จะทำลายสิ่งต่าง ๆ ลงไปอีกไหม? มีภาวะแทรกซ้อนที่ฉันอาจหายไปหรือไม่

คำตอบ:


7

เกมกระดานเป็นตัวอย่างที่ดีของเกมที่สามารถสร้างขึ้นโดยใช้ MVC เนื่องจากตรรกะของเกม (แบบจำลอง) มีอยู่ในภาพที่เป็นอิสระจากภาพ (ดู) อย่างไรก็ตามหากคุณพิจารณาเกมแอ็คชั่นเช่น Gears of War รูปทรงเรขาคณิตของแบบจำลองสามมิตินั้นมีความเป็นธรรมชาติของตรรกะของเกมดังนั้นการแยกมุมมองออกมาราวกับว่ามันเปลี่ยนได้กลายเป็นสิ่งที่ไม่มีจุดมุ่งหมาย Unity3D เป็นตัวอย่างที่ยอดเยี่ยมของวิธีการจัดระเบียบรหัสเฉพาะเกม คุณมีคลาสเอนทิตีฐานซึ่งคุณเพิ่มฟังก์ชันการทำงานให้กับส่วนประกอบโดยที่องค์ประกอบหนึ่งอาจจัดการกับการวาดเอนทิตี้ของหนึ่งจัดการกับตรรกะของเกมเป็นต้นดูที่โพสต์บล็อกที่มีชื่อเสียงเหล่านี้ในหัวข้อ:

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html


MVC สามารถทำงานได้ดีสำหรับFPSดูที่gamasutra.com/features/20050414/rouwe_01.shtmlสำหรับการอ้างอิงอย่างน้อยหนึ่งรายการ
หิน

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

5

ฉันใช้มัน:

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

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

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


0

การแบ่งประเภทเช่นนั้นคือการแยกระหว่างเอ็นจิ้นและโหมดเกมและค่อนข้างบ่อย มีพื้นที่มากมายสำหรับสิ่งที่เป็นนามธรรมไปพร้อมกัน

เอ็นจิ้นของคุณและข้อมูลกราฟิกเกมของคุณอาจเป็นในมุมมอง, โค้ดเกมของคุณในแบบจำลอง, และคอนโทรลเลอร์จะเป็นกาวใด ๆ ก็ตามที่คุณใช้เพื่อบอกเอนจิ้นของคุณว่า


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