Estou estudando sobre desenvolvimento de jogos e a aplicação do padrão MVC.
Já busquei em diversos sites sobre sua implementação e encontrei duas definições bem explicadas, mas diferentes:
Model - contém apenas os dados da entidade (posição, energia, velocidade, etc.) e notifica a View sobre sua mudança de estado
View - desenha o Model na tela de acordo com seu estado
Controller - verifica os inputs do usuário e contém as ações da entidade (pular, atacar, mover, etc.)
(neste caso há pelo menos um Controller para cada Model no projeto e os dados da entidade são separados de suas ações)
Model - contém os dados e as ações da entidade e notifica a View sobre suas mudanças de estado
View - desenha o Model de acordo com seu estado
Controller - verifica os inputs do usuário e avisa o Model
(neste caso tanto os dados como as ações ficam no Model, ele faz os cálculos ao invés do Controller)
Algumas referências da definição 1:
http://obviam.net/index.php/the-mvc-pattern-tutorial-building-games/
“What this all means is, that the models (robots) don’t know anything about how to draw themselves, or how to change their state (position, hit points). They are dumb entities. In Java they are also called POJOs (plain old java objects). The controller is in charge of changing the models state and notify the renderer. The renderer has to have a reference to the models (robots and any other entities) and their state, in order to draw them.”
http://abrindoojogo.com.br/abrindo-o-jogo-shellshock-nam-67
“Imaginemos o conceito de MVC aplicado a um Tanque. Primeiramente ele seria dividido em Entity (Tank), EntityRepresentation (TankRepresentation) e um Controller (TankController). O TankController tem funções como GetAcceleration(), GetSteerDirection(), GetAimTarget() e Fire(). A I.A. guia o tanque usando um TankAIController e o jogador através de TankPlayerController. A classe Tank acompanha o estado físico do veículo, os danos e direção. A TankRepresentation além de desenhar o tanque, cria as partículas de fumaça quando o tanque atira e reproduz um rastro onde o veículo passou.”
“Model Handles data storage and retrieval (eg. Store character x position). View Handles the display/communication (eg. Position character on stage). Controller Handles most the of the application logic (eg. Get current x position)”
http://www.badlogicgames.com/wordpress/?p=2668 (aqui o autor deixa claro que não está usando o MVC “100% puro”)
“The controller(s) are a bunch of classes that reference the model and know how to act on it. E.g. a monster controller might be responsible for moving around a monster in the world, let it seek and attack the hero and so on. Controllers are also responsible for implementing things like the camera following the hero, reacting to user input and so on. All of these things generally update the model but usually do not inform the view of any changes. Either the view can figure out that the model changed, or the model takes note that something changed, which the view can query for.”
Estes são alguns exemplos, claro que há vários tutoriais da definição 2 que dizem que a lógica deve estar no Model e não no Controller, mas essas várias interpretações geram uma certa confusão.
Existe diferença na aplicação do padrão se for para desenvolver um jogo? O que é mais prático, manter a lógica no Model ou aplicá-la no Controller?