Comments 27
Очень понравилась компонентная структура. Когда автор мне про неё впервые рассказал, я так возбудился, что тут же побежал прикручивать её к своему проекту :) Подход действительно работает очень хорошо и заставляет посмотреть свежим взглядом на заезженную парадигму ООП и её место в народном хозяйстве :)
В Unity используется точно такая же структура
Хм. Лишних — это каких?
Не к одному компоненту, а к одному объекту. Я сомневаюсь, что буду это делать в ближайшее время, не стоит такой задачи. Мне от архитектуры нужна была гибкость в добавлении новых объектов, а выносить это все в конфиги — дело десятое.
Оно лично мне ничего особо не принесет в плане удобства — разве что внутреннюю гармонию, мол «вот сейчас все как надо»)
Оно лично мне ничего особо не принесет в плане удобства — разве что внутреннюю гармонию, мол «вот сейчас все как надо»)
Интересно.
P.S. Хотелось бы хотя бы видео игрового процесса глянуть.
P.S. Хотелось бы хотя бы видео игрового процесса глянуть.
Я с XNA никогда не работал (а выглядит эта хна, кстати, весьма тяжеловесной...), а с OpenGL в свое время развлекался. К тому же, я упомянул, что сначала решил писать на C++, и цппшная версия была на ОпенГЛ, разумеется — поэтому когда я перешел на шарп, было проще повторить то, что я реализовал на С++, нежели начинать внедрять новую технологи.
Спасибо большое за статью, хотелось бы поподробнее узнать про реализацию отрисовки. Как вы добились легкой подмены рендера (например, рендер directX, openGL, GDI и т.д.)
Архитектура прекрасно описана, еще раз спасибо за статью и ждем новых.
Архитектура прекрасно описана, еще раз спасибо за статью и ждем новых.
Я опишу это подробнее после. Если коротко — все, что связано именно с отрисовкой вынесено в Graphics.dll. Внешней системе важен только интерфейс IGraphicSystem. У него есть метод AddToFrame(IGraphicsObject);
Соответственно, для опенГЛ, допустим, реализуется OGLGraphicSystem:IGraphicSystem, и всего несколько классов объектов — OGLSprite:IGraphicsObject, OGLMap:IGraphicsObject, OGLText:IGraphicsObject — это все, что юзает игра.
Соответственно, если нужно написать другой рендерер, просто реализуется наследник интерфейса IGraphicSystem, допустим Direct3dGraphicSystem вместе с D3DMap, D3DSprite, D3DText.
Спрайт, допустим, можно заменить 3Д моделькой — внешней системе, в принципе, все равно — она просто берет графический объект, выставляет ему координаты и кидает на рендер.
Соответственно, для опенГЛ, допустим, реализуется OGLGraphicSystem:IGraphicSystem, и всего несколько классов объектов — OGLSprite:IGraphicsObject, OGLMap:IGraphicsObject, OGLText:IGraphicsObject — это все, что юзает игра.
Соответственно, если нужно написать другой рендерер, просто реализуется наследник интерфейса IGraphicSystem, допустим Direct3dGraphicSystem вместе с D3DMap, D3DSprite, D3DText.
Спрайт, допустим, можно заменить 3Д моделькой — внешней системе, в принципе, все равно — она просто берет графический объект, выставляет ему координаты и кидает на рендер.
Спасибо большое, очень полезная статья. В избранное, однозначно. Чувствую почитаю ее еще не раз, чтобы полностью понять.
Если бы я был таким молодцом в те годы, сумевшим написать игру в которую интересно рубиться с друзьями, я бы собой однозначно гордился. Вы молодец :)
Автор, дайте, пожалуйста, ссылочку на исходники или на exeшник. Хочется «ручками потрогать» игру.
Sign up to leave a comment.
Goblin Wars II.NET – история создания сетевой игры на C# с нуля