Это один из подходов к этому ... для полноты в этом посте я остановлюсь на другом подходе. По сути, противоположное мнение утверждает, что ни одному объекту не нужно (или не иметь) специальных знаний о том, как визуализировать себя. Сущность - это просто набор состояний ... и средство визуализации может просто посмотреть на это состояние и нарисовать его правильным образом.
Пример ... скажем, у вас есть несколько кораблей. Некоторые летят быстро, некоторые стреляют ракетами, у некоторых вокруг него вращается спутник, который также стреляет. Ваш класс "Entity" может иметь следующие свойства
- Модель VisualRepresentation
- Положение матрицы
- Entity [] AttachedEntities
Ваш рендерер может затем перебрать ваш общий "List<Entity>
", и
- Нарисуйте визуальное представление (т.е. модель) объекта, используя позицию
- Зацикливайтесь на AttachedEntities и рисуйте их (рекурсивно).
Это, очевидно, упрощенный пример ... но в этом случае логика рисования полностью содержится в коде рендеринга, и ей нужно только заниматься как можно меньшим количеством информации. Хотя класс корабля может фокусироваться на самой игровой логике (т. Е. На какой скорости я летаю, какое оружие я использую, сколько энергии у меня на щитах и т. Д.).
Что касается того, какой из них предпочтителен, то ответ на самом деле лежит в пределах требований вашего проекта и того, что вам удобно. Не пытайтесь создать игровой движок перед созданием игры ... просто делайте все, что нужно, чтобы сделать вашу игру, и тогда возможно вы можете извлечь компоненты, которые работали после вас Корабль игры: -P