Atualmente, estou trabalhando em um projeto iOS chamado Old Frank, que tenho tentado seguir um padrão de design do MVC.
A essência disso é.
GameObjects(model) <- Scene(controller) -> Sprites "SpriteKit" (View)
Agora, se eu entendo o MVC corretamente, você não pode usar muitos dos recursos que o SpriteKit tem a oferecer, se você deseja seguir o MVC. Por exemplo SKAction
, qualquer detecção de colisão, etc.
Não depende do modelo em que os objetos do jogo estão localizados e como eles devem reagir ao tocar em outros objetos? Não cabe ao modelo determinar a localização ao longo do tempo?
Existem partes do SpriteKit que seriam consideradas aceitáveis para serem usadas como a "visualização" no MVC, além da renderização?
ios
objective-c
spritekit
mvc
Skyler Lauren
fonte
fonte
Respostas:
Sua pergunta é boa. Eu tive exatamente a mesma pergunta sobre o SpriteKit e fiquei muito confuso com a falta de informações na web sobre isso. O SpriteKit parece encorajá-lo a colocar todo o seu código Model-View-Controller na mesma classe (sua subclasse SKScene), o que é realmente confuso para mim. Como você construiria um jogo de qualquer complexidade usando essa técnica? Combinar o estado do jogo (score, numLives, etc), com o código do controlador como touchesBegan / Ended e a renderização de exibição na mesma classe fica muito difícil de gerenciar além do mais simples dos jogos.
Concordo que usar o padrão de lembrança para ajudar na persistência é uma boa ideia, mas também acho que mudar para um design MVC pode ser benéfico. Atualmente, estou movendo meu jogo para uma arquitetura MVC. Minha abordagem atual é fazer com que meu modelo (objetos de jogo) gerencie os physicsBodies, a subclasse SKScene atue como controlador e uma classe separada para atuar como visão para configurar e renderizar os aspectos visuais dos SKNodes na cena. Estou apenas no meio do processo, então não posso dizer com certeza se esse será um bom design, mas parece que será muito melhor do que ter uma subclasse de 10.000 linhas do SKScene.
fonte
Em termos simples, um design comum nos jogos SpriteKit é cenas, camadas, nós e nós filhos.
Você pode transformar cada parte em uma classe discreta que encapsula todas as partes, propriedades e métodos.
Por exemplo, uma classe de plano de fundo que possui camadas de imagens, partículas e várias propriedades, como a velocidade de cada camada, deve se mover e métodos públicos para iniciar e parar de rolar o plano de fundo.
Nesse design, você monta essas classes discretas que fazem seu próprio trabalho na cena, que lida principalmente com atualizações em execução: física, eventos de toque etc.
fonte