Эволюция геймобжекта

Намедни меня попросили в продолжение темы эволюции рассказать про эволюцию игрового объекта (GameObject). Отвечаю: тут эволюции нету. Тут самое что ни на есть распределенное блуждание по дюжине разных направлений.

Вообще идея сделать универсальный и абстрактный GameObject часто занимает сердца и умы. Это точно можно предсказать, во что выльется через несколько лет - в гигантского монстра на несколько сотен виртуальных функций, который тормозит все, что можно и все что нельзя. С этом пытаются бороться, разделяя GameObject на части, у многих получается. Но после этого начинают навешивать дополнительные иерархии классов, пытаясь совместить несовместимое по определению - логические игровые сущности и физические (геометрические объекты).

Но мое глубокое ИМХО - лучший gameobject - это отсутствие gameobject вообще. В игре не так много сущностей, которые обладают полностью единым интерфейсом. И слишком много сущностей, которые обладают совсем разным интерфейсом.

15 Comments

  1. look4awhile:

    напомните, как называется ошибка проектирования, когда разные сущности склеиваются в один объект?

  2. alll:

    http://en.wikipedia.org/wiki/God_object
    http://en.wikipedia.org/wiki/Big_Hairy_Object

  3. Finder:

    GameObject неявным привидением присутствует в тулсете. Не в качестве одного класса, конечно, но он есть.

  4. aruslan:

    Tangling of concerns, обычно.
    Как антитеза к Separation of concerns.

  5. aruslan:

    Строго говоря, tangling of concerns - это приём проектирования. Просто когда его применяют “от незнания” - получается ошибка.
    На выходе - сильно сцепленные (tightly coupled) и слабосвязные (low cohesive) компоненты.

  6. Yuri:

    Альясинг?

  7. Dront:

    немного IMHO:
    В игре есть много интерфейсов, и есть много классов объектов, причем у каждого объекта - некоторый subset из этих интерфейсов.
    То бишь, иерархии классов в виде наследования - мало подходят для игр вообще. Агрегировать надо. Типа, есть объекты, которые умеют рендериться, коллидиться, отбрасывать тени, имеют хитпойнты и AI. Если пытаться сделать его наследником от IRenderable, IShadowCaster и т.п. - получится жуткое месиво из всякого. А вот собрать его из экземпляров class AnimatedMonsterRenderer, class ScriptedAI и т.п. - вполне можно.

    При этом “базовый” GameObject все равно может быть полезным - но немного для другого… всякие там rtti, serialization и прочее подобное.
    Общая суть идеи - плох не GameObject, плоха иерархия.

  8. dDIMA:

    > AnimatedMonsterRenderer
    Еще хуже. Animated или нет - это вообще мелкая визуальная фенечка, которая требуется преимущественно только для рендеринга. Ну а вставлять слово Monster мне вообще не хочется.
    Простой пример: анимированный персонаж и скайбокс имеют очень похожие интерфейсы.

  9. The Daily DIP Count » Blog Archive » The God Object:

    [...] still not convinced in the rightness of the thou shalt have no single GameObject school of thought. Having the objects present an uniform interface towards all objects present in [...]

  10. neteraser:

    GameObject -
    совсем непонятно.

    не платят теперь за GameObject никакого бабла!
    платят за его отсутствие (за излечение от него).

    у вас все еще платят за GameObject?
    падонаки уже на пути - к вам! :)

    замечу,
    dDIMA отписал не очень убедительно
    (если не считать самого бренда “dDIMA Evolution”)

    только таким худеньким напалмом
    будет довольно трудно вынудить уволить лида.
    понимаешь, дядя Дима? :)

    вот и пример:
    >> not convinced in the rightness of the thou shalt have no single GameObject
    уважаемый коллега не понимает. потому что он не догадался,
    что на лечении от GameObject можно сделать денег :)

    или думаете нельзя? что думаете?

  11. neteraser:

    добавлю,
    во всех этих вопросах хорошо/плохо в программировании -
    мне очень сложно найти с людьми общий интерфейс и ценности.
    у меня нет ценностей, но есть интерес.

    у меня есть всего 3-4 человека,
    с которыми можно что-то измерять понятиями хорошо/плохо.

    со всеми остальными -
    измеряю только в бабле выгодно/невыгодно (прямо или косвенно)

    GameObject - и плохо, и едва ли выгодно.
    спорить, собственно, тут нет о чем.

    спорить вот так просто о чем-либо вообще нет причины :)
    люди либо будут соглашаться с вами, либо говорить полную ерунду.

    не припомню, чтобы когда-либо было иначе! (мог забыть, конечно…)

  12. dDIMA:

    Ну про геймобжект меня сильно просили написать в каментах, хотя действительно я написал не очень убедительно.
    А за хорошую архитектуру действительно не платят :(. Как ни парадоксально, платят за переделки плохой архитектуры.

  13. simsmen:

    2 dDIMA, я действительно в обсуждении получил ту дополнительную информацию, которой мне не хватало. Вот не получался у меня GameObject и всё. Не нужен:) Был в большой задумчивости:) Теперь стал более уверен в своей правоте, снесу, то что пытался под него вымучить:)

  14. EyeGem:

    Хм. Очень много недоабстрагированной конкретики, попытки избавиться от которой остаются незавершёнными, либо необсужденными.

    dDIMA:
    Почему “универсальный и абстрактный GameObject” должен быть гиганским или монстром?

    Если он нужен такой универсальный и такой абстрактный, то разве не логично, что вся specific-часть вне него будет, разве не? Это приведёт к QueryInterface-подходу, что хорошо в нужных местах и в правильно реализованном виде.

    А “логические игровые сущности” и “физические (геометрические объекты)” совмещать действительно не нужно.
    Логика (как физика World, так и сенсорика/моторика объектов) должна управлять телами, а не быть с ними единой.

    Могу вот, например, ссылку дать на статью мою, где тема затрагивается: http://www.eye-gem.net/gepg.zip

  15. EyeGem:

    Сорри, пытаясь написать ссылку по-памяти, забыл субпуть.
    Лучше просто зайти на заглавную: http://www.eye-gem.net/

Leave a comment

You must be logged in to post a comment.