Обработка графики в стиле ООП - PullRequest
1 голос
/ 13 июня 2009

Как в объектно-ориентированном стиле программирования работать с графикой? Должен ли каждый объект содержать свою графическую информацию? Как эта информация отображается?

Мой опыт в создании графических программ ограничен, но я склонен иметь объекты и графику, которые только слабо связаны. Например, если бы я реализовал игру в шахматы, я бы имел тенденцию иметь графический объект, отвечающий за создание доски, получение изображений для шахматных фигур, загрузку их в хеш, привязанный к таким именам, как White_Queen, и затем обновление экрана при каждом изменении ситуации. , Сами изменения будут переданы в основной игровой цикл от объектов, а затем в графический объект. Кусковые объекты будут содержать имя графической фигуры, к которой они были прикреплены, в виде строки, но не содержат никакой графической информации. Это ООП? Это хорошо ООП?

Теперь я думаю о том, что, поскольку проект, над которым я работаю, включает в себя процедурно сгенерированную графику (очень, очень простые), я мог бы хранить процедуры в объектах и ​​получать графический объект для чтения процедур из объектов перешел на это. Это будет ООП? Это было бы хорошо?

В реальном мире, насколько я знаю, вещи не содержат графику. Вещи содержат свойства, и мой мозг их интерпретирует. Слепой мозг и мозг ястреба по-разному интерпретируют разные объекты. Это ООП? Должен ли я попытаться сделать это таким образом?

Привет, спасибо за твою помощь, как обычно!

г.

PS Я пишу код на С для Nintendo DS. Я рисую графику, окрашивая пиксели индивидуально!

Ответы [ 2 ]

1 голос
/ 13 июня 2009

У вас есть несколько вопросов в одном. Надеюсь, это поможет.

Должен ли каждый объект содержать свою графическую информацию? Как эта информация отображается?

Программисты, как правило, проводят различие между терминами «графика» и «графический интерфейс пользователя» (GUI). Обычно под графикой подразумеваются статические изображения (например, фотографии) или динамические изображения (например, видеоигры), тогда как графический интерфейс пользователя относится к обычным элементам, которые вы видите в приложении, таким как окна, кнопки или меню. Вы имеете в виду графику или графический интерфейс?

Существует несколько уровней абстракции между вашей программой и получением изображения на вашем мониторе. На ПК с Windows это обычно сводится к вызову функций Win32 или DirectX, которые обрабатывают все вещи самого нижнего уровня.

Я мог бы хранить процедуры в объектах и ​​получать графический объект для чтения процедур из объектов, переданных ему.

Вы не должны помещать свои основные функции в графический код или наоборот. Держите их отчетливыми. Это значительно упрощает, скажем, изменение внешнего вида ваших фигур в шахматной игре или изменение правил без изменения пользовательского интерфейса.

Как упомянул Алекс Мартелли, архитектура MVC - это хороший способ отделить бизнес-логику (как она работает) от представления вашего приложения (как оно выглядит). В MVC обычно считается, что представление содержит GUI, который может иметь или не иметь «графику».

Это ООП? Это хорошо ООП?

Мне кажется, что вам нужно лучше понять, что значит объектно-ориентированный дизайн. Поскольку на эту тему существует так много внешних ресурсов, я предлагаю вам это сделать. А пока, может быть, вам стоит просто поэкспериментировать и попробовать разные способы программирования своей игры, а не беспокоиться о том, удачный ли это дизайн. Вы можете понять, что работает хорошо, а что нет - вам не нужно совершенствовать его с первого раза!

В реальном мире, как я узнал, вещи не содержат графики.

На метафизическом уровне, я полагаю, вы правы ... то, что мы видим, это просто представление о том, что вокруг нас, электрические сигналы, генерируемые фотонами, поражающими наши сетчатки. Когда вы пишете свою программу, вы просто пытаетесь генерировать изображения, которые имеют смысл для людей. Я не совсем уверен, где вы могли бы пойти с этим.

Я рисую графику, окрашивая пиксели индивидуально!

Не проще ли использовать какую-нибудь графическую библиотеку, чтобы справиться с этим? Таким образом, вы можете просто делать такие вещи, как DrawCircle (), а не делать все пиксели самостоятельно. Тем не менее, вы можете многому научиться, реализовав собственную низкоуровневую графическую библиотеку ... просто помните, что вы будете тратить много времени на библиотеку, а не на саму игру.

1 голос
/ 13 июня 2009

Model-View-Controller (MVC) - это популярное расположение графики (и другой информации представления) в ООП. Объекты, которые являются моделями, несут информацию, но не имеют отношения к представлению; объекты, которые являются представлениями, отображают эту информацию (например, графически). Запись в Википедии, на которую я указываю, и многие другие страницы, которые вы можете найти, дадут вам больше информации!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...