Я занимаюсь разработкой 2D спрайтовой игры для Windows 7 Phone с использованием XNA. Обучение и учебные пособия, доступные для него, довольно полезны, но проблема, с которой я сталкиваюсь, заключается в том, что каждый из них по-своему подходит к дизайну своего класса, и код не очень хорошо продуман. В результате мне было трудно понять, какие обязанности я должен дать конкретному классу.
Например, у меня может быть базовый класс спрайтов, BaseSprite
который знает, как рисовать себя, проверять наличие коллизий и т. Д. Затем у меня может быть AnimatedSprite
класс, который будет знать, как перемещаться по его листу спрайтов, ExplodingSprite
классу и так далее. Эта техника продемонстрирована на примере Space Invaders в материалах Windows 7 Phone Jumpstart Session 2 .
В качестве альтернативы, я мог бы вместо этого поместить большую часть рендеринга и запуска игры в GameScreen
класс; этот класс и его производные классы ведут себя больше как формы или веб-страницы с точки зрения своих обязанностей. Классы Sprite - это более простые контейнеры с гораздо меньшей логикой.
Эта техника используется в игре Alien Sprite для Windows 7 Phone Training Kit и в других примерах менеджера состояний игры.
Каков правильный объектно-ориентированный подход к дизайну классов в разработке игр?