データ駆動型設計とは何ですか?[閉まっている]


11

私はゲームのデータ駆動型設計をカバーする多くの記事を読んでいます。それは次のようになります:

  • ハードコーディングなし
  • エンジンにゲーム固有のコードはありません
  • AI、カットシーンなどのスクリプト。
  • 再利用のためのコードの一般化
  • コンポーネント設計
  • モジュール性
  • 低カップリング
  • エディター(データ、マップ、スクリプト用)
  • 外部データ検索
  • テキストファイルに保持される定数(.iniまたはその他)
  • デザイナーによるスクリプト作成と操作のためにエディターを介してデータを公開する

さて、私の質問は、この理解は正しいですか?


3
サイトへようこそ。ここには2つの質問があり(通常、投稿ごとに1つだけ質問する必要があります)、「開始方法」に関する2番目の質問はトピック外と見なされるため、編集して、質問を簡潔にしました。何かを始める方法について話し合いたい場合は、ゲーム開発チャットにアクセスすることを検討してください。

@JoshPetrieしかし、私が今多くのサイトに行ったことがあり、まったく答えが得られなかったので、それは最も重要なものでした。方向を突き出すことすらありません。が存在しなければならないSOMEこれらの科目に洞察力のビットを得た人。
OmniOwl 2013


1
おそらくそれはあなたにとって最も重要ですが、ここではトピックから外れています(FAQを参照)。また、質問を終了することもできます。はじめにの質問をしたい場合は、ゲーム開発チャットまたはGDNetなどの実際のディスカッションフォーラムにアクセスしてください。

1
@Viparオフトピックの質問についてサポートが必要な場合は、チャットにポップしてください。あなたが助けを得ることを保証するわけではありませんが、多くの賢い人々がそこでぶらぶらしています。
ClassicThunder 2013

回答:


10

これは正しくないと思います。データ駆動型設計で最も重要なアイデアは、データを変更(または更新)するものからデータを分離することだと思います

したがって、次のような標準的なオブジェクト指向の深い階層から移動します。

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パラダイムの1つは、エンティティシステムです。調べるための優れたリソースは次のとおりです。

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

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

もちろん、すべてのパラダイム/アイデアと同様に、正確な定義はなく、誰もがDDDを話すときに同じ考えを理解しているわけではありませんが、これが最も重要なことだと私は信じています。


はい、分離部分について言及するのを忘れていました。そして、これはまさに私が見たいものです。私はそんなに多くの理論しか読めません。具体例をいくつか見たい。ありがとうございました。記事もご覧になります!
OmniOwl 2013

しばらく待って、つい先ほど読んだ最良の説明が見つかりました。それは私がここで尋ねた質問に答えたことが判明しgamedev.stackexchange.com/questions/48971/... D:
ロイT.

4

定義が複雑すぎると思います。確かに、箇条書きのポイントリストに含まれている原則の多くは、ソフトウェアエンジニアリングの観点からは良い原則ですが、必ずしもすべてが「データ駆動型」の定義の一部であるとは限りません。それらの多くは重複している、またはデータ駆動型のアプローチを使用して実装するのが最適ですが、何かをデータ駆動する行為を構成するものではありません。

データ駆動型ソフトウェア開発の実際の定義は、一般にかなり単純です。プログラムは、コード内に一連の事前定義および固定ステップを持たずに、主にいくつかの外部情報(レベルデータ、スクリプトデータなど)に基づいてアクションを実行します制御フローを決定するそれ自体。


あなたは私が物事を過度に複雑にしていることは間違いないでしょう。それは私がしがちなことです。しかし、これをどのようにコーディングし始めるかについて、私は思いを巡らせることができません。
OmniOwl 2013

1
GDNetに質問へ回答を投稿しました。問題の核心は、一生懸命やるのをやめ、最終的に欲しいものの1つの単純な側面を選び、それを使って小さなゲームを構築することです。

私も見て、返事をしました。これについて私に話してくれてありがとう。
OmniOwl 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.