SpriteKit เป็นไปตามรูปแบบ MVC หรือไม่


11

ขณะนี้ฉันกำลังทำงานในโครงการ iOS ชื่อOld Frankที่ฉันพยายามทำตามรูปแบบการออกแบบ MVC

ส่วนสำคัญของมันคือ

GameObjects(model) <- Scene(controller) -> Sprites "SpriteKit" (View)

ตอนนี้ถ้าฉันเข้าใจ MVC อย่างถูกต้องคุณจะไม่สามารถใช้คุณสมบัติมากมายที่ SpriteKit มีให้ถ้าคุณต้องการติดตาม MVC เช่นSKActionการตรวจจับการชนเป็นต้น

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

SpriteKit มีส่วนใดบ้างที่จะถือว่าใช้ได้ในการ "ดู" ใน MVC นอกเหนือจากการเรนเดอร์?


“ ฉันพยายามติดตามรูปแบบการออกแบบ MVC” - เพราะเหตุใด
Paul D. Waite

2
@ PaulD.Waite ฉันชอบความคิดในการแยกโมเดลของฉันออก ในทางทฤษฎีแล้วทำให้ง่ายต่อการย้ายหรือสร้างบนแพลตฟอร์มอื่น นอกจากนี้ยังช่วยให้จัดการเรื่องความคงทนซึ่งเป็นเหตุผลที่ใหญ่ที่สุดได้ง่ายกว่าเดิม
Skyler Lauren

Gotcha เพื่อให้บรรลุเป้าหมายการคงอยู่รูปแบบของที่ระลึกอาจมีประโยชน์มากกว่า MVC สไปรต์ของคุณอาจเป็นผู้ริเริ่มและพวกเขามีความรับผิดชอบในการสร้างการเป็นตัวแทนที่ประหยัดของรัฐของพวกเขาและฟื้นฟูตนเองจากการเป็นตัวแทนในภายหลัง ฉากควบคุมของคุณอาจเป็นสิ่งที่ขอให้ตัวแทนจากพวกเขา
Paul D. Waite

นั่นอาจส่งผลให้เกมบันทึกของคุณสามารถใช้งานได้บนแพลตฟอร์มอื่นแม้ว่าฉันจะสงสัยว่ามันเป็นเรื่องเกี่ยวกับความสามารถในการพอร์ตเมื่อทำงานกับกรอบ Mac / iOS เท่านั้นเช่น SpriteKit
Paul D. Waite

1
@ PaulD.Waite ขอบคุณสำหรับความคิดเห็นของคุณฉันจะมองไปที่รูปแบบของที่ระลึกเป็นรูปแบบอื่นที่จะต้องพิจารณาในอนาคต คำถามสองข้อนี้เกี่ยวกับโครงการเดียวกันใช่ แต่ไม่เกี่ยวข้องกัน ประหลาดใจที่เห็นคนอื่นอพยพไปที่ stackoverflow และจะพิจารณาคำตอบของเขาในคืนนี้ =)
Skyler Lauren

คำตอบ:


6

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

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


ขอบคุณสำหรับคำตอบ / ความคิดเห็นของคุณ เสียงเหมือนคุณรู้สึกว่าการใช้คุณสมบัติของ SpriteKit ไม่ได้ทำตามการออกแบบ MVC เช่นกัน อย่าลังเลที่จะส่งอีเมลถึงฉัน skyler@skymistdevelopment.com หากคุณมีคำถามเกี่ยวกับวิธีการที่ "ฉัน" กำลังใช้ MVC หรือต้องการดูรายละเอียดเพิ่มเติมว่า "คุณ" ใช้ MVC กับ SpriteKit =) อย่างไร
Skyler Lauren

ไม่มีอะไรบังคับให้คุณใส่รหัสส่วนใหญ่ในคลาส SKScene ในความเป็นจริงฉันพบว่าเมื่อใช้ SpriteKit ตรรกะส่วนใหญ่ตรงกับโหนดมากขึ้นกว่าฉากโดยธรรมชาติเนื่องจากโหนดเป็นรุนแรงของ SpriteKit The Scene นั้นมีขนาดเล็กกว่า "Controller" เล็กน้อยเพื่อจัดการกับการอัพเดตและอินพุตสำหรับแผนผังโหนดของคุณ แม้ว่ารุ่น "MVC" ยังคงไม่ตรงกับ SpriteKit เนื่องจากโหนดมักจะเป็น "M" และ "V"
Attackfarm

1

ในแง่ง่ายการออกแบบทั่วไปในเกม SpriteKit คือฉากเลเยอร์โหนดและโหนดลูก

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

ตัวอย่างเช่นคลาสพื้นหลังที่มีรูปภาพเลเยอร์อนุภาคคุณสมบัติต่าง ๆ เช่นความเร็วแต่ละเลเยอร์ควรเลื่อนและวิธีการสาธารณะเพื่อเริ่มและหยุดการเลื่อนพื้นหลัง

ในการออกแบบนี้คุณจะรวบรวมคลาสที่ไม่ต่อเนื่องเหล่านี้ที่ทำงานของตัวเองลงในฉากซึ่งส่วนใหญ่จัดการกับการอัพเดท: ฟิสิกส์, กิจกรรมสัมผัส ฯลฯ

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