Как стать автором
Обновить

Комментарии 14

Предыдущий пост не читал, но и этот, честно говоря, ни о чем.
Статья хорошая, написана именно на уровне смыслов. Хорошо что написали про редактор внутри игры, как раз раздумываю в каком виде его реализовать. Возможно, действительно нужно сделать только UI-интерфейс и обмен данными через сообщения.
А какие нибудь подробности будут?
Одна вода, никакой конкретики…
А какие вы бы хотели подробности?
Куски кода — их не будет, да, мне кажется, они и не нужны…
Диаграммы, скриншоты, конкретные названия игр?..
Спрашивайте — постараюсь добавить конкретики.
>Там никаких сложностей, кроме отрисовки в текстуру и доступа к произвольному пикселю текстуры, у нас не возникло
Один вопрос — «Зачем?», проверка на попадание курсором в спрайт?
Да. В играх этого вида издатели, по крайней мере, наши требовали, чтобы был «pixel perfect hit». В наших прошлых играх это реализовалось тупым доступом к пикселю текстуры и проверки его альфы. Теперь же мы от этого полностью отказались и при загрузке строим битовые маски, и потом уже проверяем клики по ним.
Я так и заподозрил, что имел место «тупой доступ» :) Практика показывает, что этот подход любим всеми.

Ну раз теперь Вы это делаете правильно — тогда мне добавить нечего :)
зачем фабрики?

смотрите
file.h

File open(FileName name);
void close(File file)

file_win32.cpp
File open(FileName name)
{
CreateFile(… );
}

void close(File file)
{

}

file_mac.cpp
File open(FileName name)
{
NS_…
}

void close( File file)
{

}

в зависимости от платформы подключаете нужный cpp файл, либо прямо в файлах ставите проверку платформы и подключаете все
завернуть в неймспейсы по вкусу

да и для таких случаев существует статическая типизация.

фабрика это усложнение на ровном месте, наверное еще и синглтон используете — в общем 2 паттерна там где они не нужны.
Фабрика, в нашем случае, это класс, который занимается инстанцированием объектов. Экземпляр фабрики не создается — используются статические функции.
А внутри функций используются вот такие конструкции:
File open(FileName name)
{
#ifdef PLATFORM_iOS
NS_CreateFile(… );
#endif

#ifdef PLATFORM_WIN
CreateFile(… );
#endif
...
}
и где тут фабрика?
Да, согласен. В этом примере её нет. Вот пример получше:
nE_Texture* nE_Factory::MakeTexture( void )
{
#ifdef NE_PLATFORM_IOS

return new nE_Texture_iOS();

#endif

#ifdef NE_PLATFORM_PL4

return new nE_Texture_Pl4();

#endif

return NULL;
}
тут можно было обойтись
typedef nE_Texture nE_Texture_iOS;
поэтому пример еще более неудачный
Интересное решение, но я его не буду использовать по идеологическим причинам. Я считаю, что вся управляющая логика должна быть сокрыта, даже если это предпроцессор. А в предложенном вами варианте информация о том, какой класс будет создан будет известен всему остальному коду.
почитайте что-то о компонентных архитектурах либо о миксинах. это сильно сократит количество вашего кода и упростит его расширение.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории