AvrDragon
> Вот я и понитересовался, может кто-нибудь при разработке игр встречался с
> задачами где хорошо помогли паттерны.
Мне нравится паттерн Listener. Очень идеальное решение для обработки событий ввода. Идеально тем что не нужно где-то делать гиганский обработчик событий нажатия клавиш на все случаи жизни. А можно просто прописывать объектам нужную реакцию на события. Например камера
class FpsCamera : public EventListener { void KeyDown(const Key &k); void KeyUp( const Key &k); };
Еще мне нравится паттерн State (на русском описания не нашел, гуглить на английском). С его помощью я делаю переключение между главным меню, игровыми редакторами и настройками, самой игрой и т.д.
Советую посмотреть исходники Glest (ванильной версии, а не современные форки). Там достаточно красивое применение нескольких паттернов (в том числе есть и фабрики)
равен
> паттерны не нужны
Обоснуйте :)
AvrDragon
> может кто-нибудь при разработке игр встречался с задачами где хорошо помогли
> паттерны.
Observer, AbstractFactory, Factory, Visitor, Strategy, Compositer ...
innuendo
> Обоснуйте :)
В основном мне непонятно, для чего нужно плодить лишние сущности.
Есть структуры данных и есть алгоритмы, решающие определенные задачи.
Потом, внезапно, приходит банда 4-х и заявляет: "А мы не такие, а у нас паттерны!!11"
А в чем смысл всего этого? (в жопу пусть себе запихают свои паттерны)
war_zes
> даже main loop (да, это оказывается тоже паттерн)? А как ты тогда игры делаешь?
Для чего называть очевидное паттерном?
равен
> Для чего называть очевидное паттерном?
Потому что паттерн - это и есть очевидное:)
Паттерн, это шаблон, а шаблон, это то что делают все считая это очевидным
Паттерн обозначает закономерную регулярность, встречающуюся в природе и в человеческом дизайне, а также повторяющийся шаблон, образец. - Вики
Поэтому вообще-то все вещи, которые программисты делают одинаково и едино - это и есть паттерны. В том числе и maingame loop (http://gameprogrammingpatterns.com/game-loop.html)
По сути, паттерны - это велосипеды. Ты их можешь придумать сам... А можешь прочитать книжку и сразу использовать. В обоих случаях ты их будешь использовать. Только в первом случае ты не знаешь как они зовутся
И все паттерны на самом деле очевидные. Просто тут все зависит от твоего опыта. Для нуба и наследование не очевидно и сложно. Да собственно и game loop, это тебе очевидно. А даже тут много тем про то как правильно обновлять игру, все новички спрашивают про этот момент.
Также и с паттерном - если вызывает сложность, значит еще не дорос. Вот когда навелосипедишь пару паттернов, вот тогда и поймешь что время все же ценнее. А ты навелосипедишь... Я тоже так относился к паттернам, пока не изобрел свой Listener и State, а потом прочел в статьях что то что я изобрел там прямо в слово в слово описано. Только я затратил намного больше времени на работоспособность всего этого
RENZAN
> Для того что-бы у очевидного было название)
У которого уже есть название))
Смысла от этого не прибавляется, но зато теперь у нас есть
два названия у одно и того-же)
war_zes
> По сути, паттерны - это велосипеды. Ты их можешь придумать сам... А можешь
> прочитать книжку и сразу использовать. В обоих случаях ты их будешь
> использовать. Только в первом случае ты не знаешь как они зовутся
Можно пойти дальше и еще придумать свое название для каждого велосипеда,
тогда велосипед не будет казаться велосипедом. Фабрику Классов можно назвать
Заводом Классов, а паттерны назвать видами проектирования)
RENZAN
> По-русски "состояние" же. Очень многие объединяют его в один с паттерном
> стратегия.
Я до стратегии не дошел. Это что-то вроде такого?
Если да, то буду знать
равен
> Можно пойти дальше и еще придумать свое название для каждого велосипеда,
> тогда велосипед не будет казаться велосипедом. Фабрику Классов можно назвать
> Заводом Классов, а паттерны назвать видами проектирования)
У всего должно быть название. Ты предисловие к банде четырех почитай. Одной из целей было как раз дать название очевидному, чтобы программисты могли общаться друг с другом понятными вещами а не начинать долго объяснять что имелось ввиду
war_zes
> Одной из целей было как раз дать название очевидному, чтобы программисты могли
> общаться друг с другом понятными вещами а не начинать долго объяснять что
> имелось ввиду
А еще они хотели сделать себе имя, но париться и напрягать мозги не хотели
равен
но ты же не читал? (кстати, я тоже не читал, ибо книга довольно нудная, паттерны легче изучать в других источниках)
war_zes
> но ты же не читал? (кстати, я тоже не читал, ибо книга довольно нудная,
> паттерны легче изучать в других источниках)
Я посмотрел что там и достаточно быстро убедился в ненужности паттернов
Ты программировать собрался или изучать паттерны? Хотя конечно, для прохождения
собеседования паттерны необходимо почитать.
Мне сложно представить сколько времени будет потрачено на изучения десятков,
а то и сотен паттернов (число которых постоянно увеличивается). Причем большая
часть из них явно не понадобится в работе.
struct A{};struct B{};struct C{}; struct foo{ void Do(A&){}; void Do( B&){}; void Do( C&){}; };
Кто-нибудь видит pattern в этом коде?
RENZAN
> Я его в бизнес приложениях то ни разу не видел. А для игр он будет несколько
> вреден.
Эээ, тоесть если нужны 3 экземпляра текстуры 2048х2048 ты три раза выделяешь память? Уверен что ты Flyweight в геймдеве ни разу не видел?
равен
> А еще они хотели сделать себе имя, но париться и напрягать мозги не хотели
> Причем большая часть из них явно не понадобится в работе.
> А в чем смысл всего этого? (в жопу пусть себе запихают свои паттерны)
:3
war_zes
> Потому что паттерн - это и есть очевидное:)
Ничего подобного. Одни очевидные, вроде Flyweight, Composite или Command. А вот некотрые, вроде Template method, Visitor либо Decorator совсем не очевидные.
>По сути, паттерны - это велосипеды. Ты их можешь придумать сам...
Плюс к этому даже если ты пару раз навелосипедил нечто похожее то еще не факт что ты смекнул что это не просто решение конкретной задачи, а подход который можно применять в довольно большом количестве случаев. Тем более в описание основные разумные случаи применения и подводные камни так же упомянуты, что достаточно ценно.
innuendo
> Observer, AbstractFactory, Factory, Visitor, Strategy, Compositer ...
А можно поподробней. Интересны ведь не сами паттерны, а их применение в геймдеве на практике.
Как использовать Composite или Observer и для чего более менее понятно. Скоре всего игровые объекты имеют детей и колбеки для всяких подсистем вроде физики, игр. логики и возможно ГУИ. А вот как и для чего использованы остальные уже не очевидно.
Adler
Это же обычная перегрузка.
паттерн foobar?
Без перегрузки я начинаю видеть паттерн "спагетти-код".
равен
> У которого уже есть название))
> Смысла от этого не прибавляется, но зато теперь у нас есть
> два названия у одно и того-же)
Тебе стоит задуматься над сменой профессии.
Adler
Это шаблон класса с методами:)
Оно похоже на пару шаблонов, но исполнено не по канону
Тема в архиве.