Что такое управляемый данными дизайн? [закрыто]


11

Я читал много статей, касающихся дизайна данных для игр. Кажется, сводится к:

  • Нет жесткого кодирования
  • В движке нет специфичного для игры кода
  • Сценарии для AI, катсцены и так далее.
  • Обобщающий код для повторного использования
  • Компонентный дизайн
  • модульность
  • Низкая связь
  • Редакторы (для данных, карт, скриптов)
  • Внешний поиск данных
  • Константы, хранящиеся в текстовых файлах ( .iniили иным образом)
  • Предоставить данные через редакторы для сценариев и манипуляции дизайнеров

Теперь мой вопрос: правильно ли это понимание?


3
Добро пожаловать на сайт. У вас есть два вопроса здесь (как правило, вы должны задавать только один вопрос на пост), а второй вопрос о том, «как начать», считается не по теме, поэтому я отредактировал его, а также сократил вопрос. Если вы хотите обсудить, с чего начать, подумайте о посещении Game Development Chat .

@JoshPetrie Но это было самым важным, так как я был на многих сайтах сейчас и не получил никакого ответа вообще. Даже не тыкать в направлении. Должно быть, есть НЕКОТОРЫЕ люди, которые немного разбираются в этих темах.
OmniOwl


1
Возможно, это наиболее важно для вас, но это не по теме здесь (см. FAQ ). Я мог бы также просто закрыть вопрос. Посетите чат по разработке игр или дискуссионный форум, например, GDNet, если вы хотите задать вопросы с чего начать.

1
@Vipar Зайдите в чат, если вы хотите помочь с вопросом не по теме. Не гарантирую, что вы получите помощь, но там много умных людей.
ClassicThunder

Ответы:


10

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

Итак, переходя от стандартной глубокой иерархии OO, как это:

class MyCreature{
     vector position;
     void update(){ position += 1; }
}

в отдельное государство и систему

class CreatureState{
    vector postion;
}

class MovementSystem{
    list<CreatureState> states;
    void update() {
        for each CreatureState state in states {
            state.position += 1;
        }
}

Одной из самых влиятельных парадигм DDD на данный момент являются Entity Systems. Вот несколько полезных ресурсов:

http://gamedevrubberduck.wordpress.com/2012/12/26/a-hybrid-entity-system-component-architecture/

http://entity-systems.wikidot.com/

Конечно, как и во всех парадигмах / идеях, нет точного определения, и не все понимают одну и ту же идею, говоря о DDD, но это то, что я считаю самым важным.


Да, я забыл упомянуть разделительную часть. И это именно то, что я хотел бы увидеть. Я могу только прочитать столько теории. Мне нужно увидеть несколько конкретных примеров. Спасибо. Также будет смотреть на статьи!
OmniOwl

Ой, подождите, наконец, нашел лучшее объяснение, которое я прочитал некоторое время назад. Оказалось, что это был ответ на вопрос, который я задал здесь gamedev.stackexchange.com/questions/48971/… : D
Рой Т.

4

Я думаю, что вы слишком усложняете определение. Конечно, многие из принципов, содержащихся в вашем маркированном списке пунктов, являются хорошими с точки зрения разработки программного обеспечения, но они не обязательно являются частью определения «управляемых данными». Многие из них имеют некоторое перекрытие или лучше всего реализуются с использованием подхода, управляемого данными, но не представляют собой акт управления данными.

Фактическое определение управляемой данными разработки программного обеспечения, как правило, довольно простое: программа выполняет действия, в основном основанные на некоторой внешней информации (фрагмент данных уровня, данных сценария и т. Д.), Вместо того, чтобы выполнять последовательность предопределенных и фиксированных шагов в коде. Сам, который определяет контроль потока.


Вы, скорее всего, правы, что я слишком усложняю вещи. Это то, что я склонен делать. Но я не могу понять, как начать кодировать это.
OmniOwl

1
Я разместил ответ на ваш вопрос в GDNet . Суть проблемы заключается в следующем: перестаньте так стараться, выберите один простой аспект того, что вам в конечном итоге нужно, и создайте с ним небольшую игру.

Я видел, и я также ответил обратно. Спасибо, что нашли время поговорить со мной об этом.
OmniOwl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.