Apakah SpriteKit mengikuti pola MVC?

11

Saat ini saya sedang mengerjakan proyek iOS bernama Old Frank yang telah saya coba ikuti pola desain MVC.

Intinya adalah.

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

Sekarang jika saya mengerti MVC dengan benar, Anda tidak dapat menggunakan banyak fitur yang ditawarkan SpriteKit jika Anda ingin mengikuti MVC. Misalnya saja SKAction, deteksi tabrakan, dll.

Bukankah itu tergantung pada model di mana objek game berada dan bagaimana mereka harus bereaksi ketika menyentuh objek lain? Bukankah itu tergantung pada model untuk menentukan lokasi dari waktu ke waktu?

Apakah ada bagian SpriteKit yang akan dianggap oke untuk digunakan sebagai "tampilan" di MVC selain rendering?

Skyler Lauren
sumber
“Saya telah mencoba mengikuti pola desain MVC” - mengapa?
Paul D. Waite
2
@ PaulD. Putih Saya suka ide menjaga model saya terpisah. Ini dalam teori membuatnya lebih mudah untuk port atau membuat ulang di platform lain. Ini juga membuatnya menjadi satu ton lebih mudah untuk mengelola kegigihan yang telah menjadi alasan terbesar sejauh ini.
Skyler Lauren
Kena kau. Untuk mencapai tujuan kegigihan, pola kenang-kenangan mungkin lebih berlaku daripada MVC. Sprite Anda mungkin adalah pencetusnya, dan mereka akan memiliki tanggung jawab untuk menghasilkan perwakilan negara mereka yang dapat disimpan, dan memulihkan diri dari perwakilan itu nanti. Pengontrol adegan Anda mungkin adalah hal yang meminta representasi dari mereka.
Paul D. Waite
Itu mungkin juga menyebabkan save game Anda bisa digunakan pada platform lain, meskipun saya kira itu sejauh yang Anda bisa lakukan dalam hal kemampuan port ketika bekerja dengan kerangka kerja Mac / iOS-saja seperti SpriteKit.
Paul D. Waite
1
@ PaulD. Terima kasih atas komentar Anda, saya akan melihat pola kenang-kenangan sebagai pola lain untuk dipertimbangkan di masa depan. Kedua pertanyaan tersebut adalah tentang proyek yang sama ya tetapi tidak terkait. Terkejut melihat yang satu lagi dimigrasi ke stackoverflow dan akan melihat jawabannya lagi nanti malam =)
Skyler Lauren

Jawaban:

6

Pertanyaan Anda bagus. Saya memiliki pertanyaan yang persis sama tentang SpriteKit dan sangat bingung tentang kurangnya informasi di web tentang ini. SpriteKit tampaknya mendorong Anda untuk memasukkan semua kode Model-View-Controller Anda ke kelas yang sama (subkelas SKScene Anda), yang benar-benar membingungkan bagi saya. Bagaimana Anda bisa membangun game dengan kompleksitas menggunakan teknik itu? Menggabungkan status permainan (skor, angka, dll), dengan kode pengontrol seperti touches Mulai / Berakhir, dan melihat rendering semua di kelas yang sama menjadi sangat sulit untuk dikelola di luar permainan yang paling sederhana.

Saya setuju bahwa menggunakan pola kenang-kenangan untuk membantu kegigihan adalah ide yang bagus, tetapi saya juga berpikir pindah ke desain MVC bisa bermanfaat. Saat ini saya memindahkan game saya ke arsitektur MVC. Pendekatan saya saat ini adalah membuat model (objek permainan) saya mengelola physicsBodies, subkelas SKScene bertindak sebagai pengontrol, dan kelas terpisah untuk bertindak sebagai pandangan untuk mengonfigurasi dan membuat aspek visual dari SKNodes dalam adegan. Saya hanya sebagian jalan melalui proses, jadi tidak bisa mengatakan dengan pasti apakah ini akan menjadi desain yang baik, tetapi sepertinya itu akan jauh lebih baik daripada memiliki subkelas 10.000 baris SKScene.

John Cleveland
sumber
Terima kasih atas jawaban / komentar Anda. Sepertinya Anda merasa bahwa menggunakan fitur SpriteKit juga tidak mengikuti pola desain MVC. Jangan ragu untuk mengirim email kepada saya [email protected] jika Anda memiliki pertanyaan tentang bagaimana "Saya" menggunakan MVC atau ingin lebih detail bagaimana "Anda" menggunakan MVC dengan SpriteKit =)
Skyler Lauren
Tidak ada yang memaksa Anda untuk memasukkan sebagian besar kode Anda di kelas SKScene. Bahkan, saya menemukan ketika menggunakan SpriteKit, sebagian besar logika jatuh ke Nodes jauh lebih alami daripada Scene, karena Nodes adalah beban dari SpriteKit. Adegan sedikit lebih dari "Controller" untuk menangani pembaruan dan input untuk pohon Node Anda. Meskipun model "MVC" masih tidak cocok dengan SpriteKit, karena Node cenderung menjadi "M" dan "V".
Attackfarm
1

Secara sederhana, desain umum dalam game SpriteKit adalah adegan, lapisan, simpul, dan simpul anak.

Anda dapat membuat setiap bagian menjadi kelas diskrit yang merangkum semua bagian, properti, dan metode.

Misalnya kelas Latar Belakang yang memiliki gambar berlapis, partikel, berbagai properti seperti kecepatan setiap lapisan harus bergerak dan metode publik untuk memulai dan berhenti menggulir latar belakang.

Dalam desain ini Anda merakit kelas-kelas diskrit yang melakukan pekerjaan mereka sendiri ke dalam Scene yang sebagian besar menangani pembaruan berjalan :, fisika, acara sentuh, dll.

Jeremy
sumber