SpriteKit MVC modelini takip ediyor mu?


11

Şu anda bir MVC tasarım modelini takip etmeye çalıştığım Old Frank adlı bir iOS projesi üzerinde çalışıyorum.

Bunun özü.

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

MVC'yi doğru bir şekilde anlarsam, MVC'yi takip etmek istiyorsanız SpriteKit'in sunduğu birçok özelliği kullanamazsınız. Örneğin SKAction, herhangi bir çarpışma algılama vb.

Oyun nesnelerinin bulunduğu modele ve diğer nesnelere dokunurken nasıl tepki vermeleri gerektiğine bağlı değil mi? Konumu zaman içinde belirlemek modele bağlı değil mi?

SpriteKit'in, MVC'de oluşturma dışında "görünüm" olarak kullanılması iyi kabul edilecek herhangi bir parçası var mı?


“Bir MVC tasarım modelini takip etmeye çalışıyorum” - neden?
Paul

2
@ PaulD.Waite Modelimi ayrı tutma fikrini seviyorum. Teorik olarak bu, başka bir platformda bağlantı kurmayı veya yeniden oluşturmayı kolaylaştırır. Ayrıca şimdiye kadarki en büyük neden olan kalıcılığı yönetmeyi de bir ton kolaylaştırıyor.
Skyler Lauren

Anladım. Kalıcılık hedefine ulaşmak için , hatıra modeli MVC'den daha uygulanabilir olabilir. Spritelarınız yaratıcı olabilir ve devletlerinin kurtarılabilir bir temsilini üretme ve kendilerini daha sonra bu temsilden geri yükleme sorumluluğuna sahip olacaklardı. Sahne denetleyiciniz onlardan temsil edilmeyi isteyen şey olabilir.
Paul

Bu, SpriteKit gibi sadece Mac / iOS tabanlı bir çerçeveyle çalışırken port yeteneği açısından gidebildiğinizden şüphelenmemize rağmen, kaydetme oyunlarınızın başka bir platformda kullanılabilir olmasına neden olabilir.
Paul

1
@ PaulD.Weite yorumlarınız için teşekkür ederim Gelecekte düşünmek için başka bir desen olarak hatıra desenine bakacağım. İki soru aynı proje ile ilgili evet ama ilgisiz. Diğerinin stackoverflow'a taşındığını görünce şaşırttı ve bu akşam cevabına biraz daha bakacak =)
Skyler Lauren

Yanıtlar:


6

Sorunuz iyi bir soru. SpriteKit ile ilgili tamamen aynı soruya sahiptim ve bu konuda web'deki bilgi eksikliği hakkında çok kafam karıştı. SpriteKit, tüm Model-View-Controller kodunuzu aynı sınıfa (SKScene alt sınıfınıza) koymanızı teşvik ediyor gibi görünüyor, bu da benim için gerçekten kafa karıştırıcı. Bu tekniği kullanarak herhangi bir karmaşıklık oyununu nasıl inşa edersiniz? Oyun durumunu (skor, numLives vb.), TouchesBegan / Ended gibi denetleyici koduyla birleştirmek ve aynı sınıftaki görünüm oluşturmayı yönetmek, en basit oyunların ötesinde yönetmek gerçekten zorlaşıyor.

Kalıcılığa yardımcı olmak için hatıra modelini kullanmanın iyi bir fikir olduğunu kabul ediyorum, ancak aynı zamanda bir MVC tasarımına geçmenin faydalı olabileceğini düşünüyorum. Şu anda oyunumu bir MVC mimarisine taşıyorum. Şu anki yaklaşımım modelimin (oyun nesneleri) fizik kurallarını yönetmesini sağlamak için, SKScene alt sınıfı denetleyici olarak hareket ediyor ve SKNodes'un sahnede görsel yönlerini yapılandırma ve oluşturma görünümü olarak hareket edecek ayrı bir sınıf. Süreç boyunca sadece kısmen yoldayım, bu yüzden bunun iyi bir tasarım olup olmayacağından emin olamıyorum, ancak 10.000 satırlık bir SKScene alt sınıfından çok daha iyi olacak gibi görünüyor.


Cevabınız / yorumunuz için teşekkür ederiz. SpriteKit'in özelliklerini kullanmanın MVC tasarım bilmecesini de takip etmediğini hissediyorum. MVC'yi nasıl kullandığım hakkında sorularınız varsa veya SpriteKit = ile MVC'yi nasıl kullandığınızı daha ayrıntılı olarak anlatmak istiyorsanız skyler@skymistdevelopment.com adresine e-posta göndermekten çekinmeyin.)
Skyler Lauren

Kodunuzun çoğunu SKScene sınıfına girmeye zorlayan hiçbir şey yoktur. Aslında, SpriteKit kullanırken, mantığın çoğu Sahne'ye göre çok daha doğal olarak Düğümlere düşer, çünkü Düğümler SpriteKit'in bruntudur. Sahne, Düğüm ağacınız için güncelleme ve giriş işlemek için "Denetleyici" den biraz daha fazla. Gerçi "MVC" modeli hala SpriteKit ile eşleşmiyor, çünkü Düğümler "M" ve "V" olma eğilimindedir.
Saldırı Çiftliği

1

Basit bir ifadeyle, SpriteKit oyunlarında ortak bir tasarım sahneler, katmanlar, düğümler ve alt düğümlerdir.

Her parçayı tüm parçaları, özellikleri ve yöntemleri kapsayan ayrı bir sınıfa dönüştürebilirsiniz.

Örneğin, katmanlı görüntüler, parçacıklar, her katmanın hareket etmesi gereken hız gibi çeşitli özelliklere sahip bir Background sınıfı ve arka planı kaydırmayı başlatmak ve durdurmak için genel yöntemler.

Bu tasarımda, kendi çalışmalarını yapan bu ayrık sınıfları, çoğunlukla güncelleme çalışmasını işleyen Sahne'ye birleştirirsiniz: fizik, dokunma olayları vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.