Using MVC with a retained mode renderer

Posted by David Gouveia on Game Development See other posts from Game Development or by David Gouveia
Published on 2012-09-04T12:13:21Z Indexed on 2012/09/04 15:55 UTC
Read the original article Hit count: 275

Filed under:
|

I am using a retained mode renderer similar to the display lists in Flash. In other words, I have a scene graph data structure called the Stage to which I add the graphical primitives I would like to see rendered, such as images, animations, text. For simplicity I'll refer to them as Sprites.

Now I'm implementing an architecture which is becoming very similar to MVC, but I feel that that instead of having to create View classes, that the sprites already behave pretty much like Views (except for not being explicitly connected to the Model). And since the Model is only changed through the Controller, I could simply update the view together with the Model in the controller, as in the example below:

Example 1

class Controller
{
    Model model;
    Sprite view;
    void TeleportTo(Vector2 position) { model.Position = view.Position = position; }
}

The alternative, I think, would be to create View classes that wrap the sprites, make the model observable, and make the view react to changes on the model. This seems like a lot of extra work and boilerplate code, and I'm not seeing the benefits if I'm just going to have one view per controller.

Example 2

class Controller
{
    Model model;
    View view;
    void TeleportTo(Vector2 position) { model.Position = position; }
}

class View
{
    Model model;
    Sprite sprite;
    View() { model.PropertyChanged += UpdateView; }
    void UpdateView() { sprite.Position = model.Position; }
}

So, how is MVC or more specifically, the View, usually implemented when using a retained-mode renderer? And is there any reason why I shouldn't stick with example 1?

© Game Development or respective owner

Related posts about mvc

Related posts about design