ПрограммированиеФорумОбщее

Entity-Component programming

Страницы: 1 2 3 Следующая »
#0
21:41, 10 фев 2015

Здравствуйте.
Я относительно недавно полез в разработку игр. В частности столкнулся с проблемой - чистым ооп не удавалось решить некоторые задачи, или как минимум они выглядили ужасно. Вероятно это из-за моего скудного опыта применения патернов...
В общем, пытаясь найти какие-то вменяемые решения, я наткнулся на сию статью. Почитал, заинтересовался. Гуглил дальше, нашел вот эту серию статей, о компонентно ориентированом подходе. В следствии понимаие углубилось. И многое из непонятного раньше становилось более менее понятным. Однако, неизведанного тоже появилось немало.

Ближе к делу. Сейчас меня мучает один вопрос. Например, мы пишем шутер. Ясно дело у игрока есть оружие. Напрашивается компонент Weapon. Однако оружие может меняться. При чем в зависимости от типа оружие меняется и алгоритм его работы (если так можно выразиться).  Как тут быть? Наследовать Weapon? Да вроде не то. Громадный switch-case в ShootingSystem, для перебора все-возможных типов оружия? Тоже не то. Возможно моя ошибка в том, что я считаю Weapon компонентом?
Собсно это основной (возможно, весьма делетантский) вопрос. Как быть в таких случаях?

З.Ы.: Любые сcылки по сабжу на статьи и книги приветсвтвутся (в т.ч. англоязыные, однако русскоязычные более предпочтительны). Особенно хотелось бы какую-нибудь книженцию прочитать.

#1
22:37, 10 фев 2015

lowercase
> Как тут быть? Наследовать Weapon?
сделай оружку набором компонентов же : )

в зависимости от текущего набора оно будет стрелять одиночными, очередями или непрерывно, хошь лазер, хошь огнемёт

#2
22:57, 10 фев 2015

http://gamedevs.org/uploads/data-driven-game-object-system.pdf

#3
23:08, 10 фев 2015

lowercase
> Любые сылки по сабжу
Любые?
Тогда рекомендую изучить строение Unity3d. Там именно компонентный принцип.

#4
23:34, 10 фев 2015

Sh.Tac.
> сделай оружку набором компонентов же
То есть оружие - это сущность? И получается, что сущность (игрок) в качестве компонент может иметь другие сущности (оружие), которые, в свою очередь, состоят из другого набора  компонет? :)


bazhenovc
Спасибо. Мимогугля замечал, но не вникал. Посмотрю :)

seaman
> Любые?
Виноват :) Имел ввиду ссылки больше теоретического характера. Юнити, скорее всего, для меня, будет излишним сейчас. Впрочем, надосуге можно почитать. Благодарю!

#5
2:35, 11 фев 2015

lowercase
> сущность (игрок) в качестве компонент может иметь другие сущности (оружие)
это вообще ООП : )
да-да, там кроме наследования есть агрегирование

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

З.Ы. вернее даже оружие точно не может, вот стрельба может

З.З.Ы. наверное нужен какой-то пример, скажем есть персонаж управляемый игроком, он умеет стрелять, а есть непись которая сидит и торгует оружием, но стрелять не умеет
так вот если надо чтобы непись стала мобом/ботом, просто навешиваем ей компонент стрельбы, можно прям на ходу, типа сидел торговец, по нему пальнули, он разозлился, и начал палить в ответ
если бы такая возможность присутствовала изначально, то могли бы быть трудноуловимые ошибки, типа того, что непись вместо того чтобы торговать, стреляет по банкам, а так нет компонента, - нет проблем

#6
3:00, 11 фев 2015

lowercase
Все просто: создаешь WeaponComponent и Weapon. Компонента хранит текущее выбранное оружие.

#7
9:20, 11 фев 2015

lowercase
> Юнити, скорее всего, для меня, будет излишним сейчас

Именно оно и будет НЕ лишним

#8
12:58, 11 фев 2015

entity component system / data oriented design это интересный и работающий подход в кач-ве альтернативы ООП, вот ссылочки, в гугле можно найти больше.
(unity3d это не совсем ecs, это частный случай со своим подходом)

очень базовое и поверхносное введение
"Создание World of Tanks Blitz на базе собственного движка DAVA"
http://habrahabr.ru/company/wargaming/blog/245321/

тоже самое, очень базово
Wargaming.net: Архитектура современных 3D движков
https://www.youtube.com/watch?v=1zLqgQ_-F84&list=PLBmERAe8ffe… JpGhyG8dJeCtf
слайды
http://www.slideshare.net/flashgamm/wargamingnet-3d?ref=http://bl… ecture-video/
(*wargaming в своих докладах перепутал data driven и data oriented. Стоит читать как data oriented.)

фундаментальная теория
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-… pment-part-1/
http://t-machine.org/index.php/2007/11/11/entity-systems-are-the-… pment-part-2/
http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-… pment-part-3/
http://t-machine.org/index.php/2008/03/13/entity-systems-are-the-… -mmos-part-4/
http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-… -mmos-part-5/
http://t-machine.org/index.php/2014/03/08/data-structures-for-ent… guous-memory/

фундаментальный доклад по DOD
https://www.youtube.com/watch?v=16ZF9XqkfRY

отличное видео с последнего cppcon
CppCon 2014: Mike Acton "Data-Oriented Design and C++"
https://www.youtube.com/watch?v=rX0ItVEVjHc

еще отличная теория по ecs подходу на примере флеш фреймворка ash
http://www.richardlord.net/blog/what-is-an-entity-framework
http://www.richardlord.net/blog/why-use-an-entity-framework

Вики по ecs
http://entity-systems.wikidot.com/

фундаментальный труд/книга по dod
http://www.dataorienteddesign.com/dodmain/

академичный небольшой ecs фреймворк
http://gamadu.com/artemis/ (есть порты на другие языки, есть примеры маленьких игр)

попытка сделать бомбермен на ecs подходе
http://www.gamedev.net/page/resources/_/technical/game-programmin… -system-r3159
попытка переосмыслить более крутым чуваком
http://t-machine.org/index.php/2013/05/30/designing-bomberman-wit… h-components/

отличный доклад от супер студии (батлфилд 4) по Dod
http://dice.se/wp-content/uploads/Introduction_to_Data-Oriented_Design.pdf
от них же
http://dice.se/publications/culling-the-battlefield-data-oriented… -in-practice/

еще базовое введение в дод
http://gamedevelopment.tutsplus.com/articles/what-is-data-oriente… gn--cms-21052

просто компиляция ссылок
http://www.asawicki.info/news_1422_data-oriented_design_-_links_a… thoughts.html
https://dataorientedprogramming.wordpress.com/

#9
14:15, 11 фев 2015

Ps-spectre
> работающий подход в кач-ве альтернативы ООП

Это НЕ альтернатива ООП

#10
14:19, 11 фев 2015

Ps-spectre
Большое спасибо! Будет чем заняться на выходные ))

#11
16:33, 11 фев 2015

innuendo, ну разумеется что полностью ооп никто не отменял. Просто для разных задач подходят разные подходы. Даже для разных слоев. (игровая логика, физика, рендер, управление состояним, сеть и т.д.). Хотя всегда можно упороться и молотком гвозди забивать.

lowercase, пожалуйста.)

кстати, еще просто забавная ссылка
https://handmadehero.org/
чувак по хардкору пилит на чистом Си (немного с примесью плюсов) юзая emacs с нуля игруленку. Прикольные стримы.
На ютубе запись.
https://www.youtube.com/user/handmadeheroarchive/videos

#12
17:50, 11 фев 2015

Ps-spectre
> ну разумеется что полностью ооп никто не отменял. Просто для разных задач
> подходят разные подходы. Даже для разных слоев

На чистом ООП прекрасно реализуется ECS

#13
18:19, 11 фев 2015

Ps-spectre
причем тут data-oriented? Да, одинаковые компоненты можно хранить в одном контейнере и эффективно все сразу обрабатывать. На этом что-либо общее с data-oriented заканчивается.

#14
21:55, 11 фев 2015

PANDA
> причем тут data-oriented?

Плюсую. data driven из области оптимизации, а pdf от DICE/Sony описалово того, какое гуано получился PPC на предпослелних конзолях :)

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.