タグ付けされた質問 「data-driven」

3
データをハードコードする場合と外部データをロードする場合
私は独自の2D宇宙ベースのゲームを作成するための数千行のコードです。これは、ランダムに生成された星系のネットワークを作成し、惑星、ステーション、船、武器のランダムな選択でそれらを埋めます。 ゲームで使用する必要のある数百の異なるステーション/船/などが存在する可能性があります。そのため、ここに私が考えていたものがあります。この情報をすべて(たとえば)XMLファイルに保存する「ソフトコード化された」データローダーを作成するために時間を費やす必要があります。したがって、後で変更するのが多少簡単になります。すべてのオブジェクトをゲームのメインエンジンにハードコーディングしています。 私はこのプロジェクトに参加している唯一の人物であり、私が言ったように、大学を離れて暇なときにやっているのは趣味のことだけです。しかし、コミュニティは、追加のファイルにデータを保存するための追加のシステム全体の作成に投資することを推奨しますか? このようにデータをソフトコーディングすることの利点は、コンストラクターを介してすべてを単純にハードコーディングすることと比較して何ですか?変更可能な外部ファイルを使用することには長期的なメリットがありますか?「mod」を持つゲームを探していない場合、外部ファイルが必要ですか?数週間または数か月でやめるかもしれない単なる趣味の場合、これに時間を費やすべきですか?

3
多くのユニークな武器/呪文/力のコードを構成する方法
私は、Pythonを使用してFTLの「ローグライクのような」ゲームを作成する経験の浅いプログラマーです(まだテキストのみを扱っているため、PyGameはまだありません)。 私のゲームには、ユニークな能力を生み出す多数の武器(初心者には約50個)が含まれます。オブジェクトコードを構造化する方法を理解するのに苦労しています(強力な(武器に根本的に異なる効果を持たせることを可能にする)点で)拡張可能な(たとえば、フォルダーにそれらをドロップすることによって後でより多くの武器を簡単に追加できるように) )。 私の最初の本能は、BasicWeaponクラスを持ち、そのクラスから異なる武器を継承することでした。しかし、これは私には問題があるようです:BasicWeaponクラスを基本的に役に立たないようにする必要があります(すべての武器に共通する機能は名前とタイプ(ピストル、aなど)のみです)、またはすべてを予測する必要があります独自の効果を考え出し、BasicWeaponにコーディングします。 後者は明らかに不可能ですが、前者はまだ機能します。しかし、それでは疑問が残ります。個々の武器のコードはどこに置けばいいのでしょうか? plasmarifle.py、rocketlauncher.py、swarmofbees.pyなどを作成し、それらをすべてゲームにインポートできるフォルダーにドロップしますか? または、eval / execに頼らずに、各武器の一意のコードを何らかの形で含むデータベーススタイルのファイル(Excelスプレッドシートのような単純なもの)を作成する方法はありますか? 後者のソリューション(データベース)に関して、私が苦労している根本的な問題は、コードとデータの分離を維持することが望ましいことを理解している一方で、武器が「コード」の境界を曖昧にしているように感じることだと思いますおよび「データ」を少し。それらはゲームで見られる多種多様な類似物を表しており、その意味ではデータに似ていますが、ほとんどの場合、他のアイテムと共有されていない少なくともいくつかのユニークなコードが必要です。コード。 このサイトの他の場所で見つけた部分的な解決策は、BasicWeaponクラスに空のメソッドの束(on_round_start()、on_attack()、on_move()など)を与え、各武器のそれらのメソッドをオーバーライドすることをお勧めします。戦闘サイクルの関連フェーズで、ゲームはすべてのキャラクターの武器に適切なメソッドを呼び出し、メソッドが定義されているもののみが実際に何かを実行します。これは役立ちますが、それでも各武器のコードやデータをどこに配置する必要があるかはわかりません。 ある種のハーフデータ、ハーフコードのキメラとして使用できる別の言語やツールはありますか?優れたプログラミングプラクティスを完全に実行していますか? 私はありません回答いただければ幸いですので、OOPの私の理解では、最高の状態で大ざっぱですあまりにもコンピュータ科学-yと。 編集: Vaughan Hiltsは、下の投稿で、私が本質的に話しているのはデータ駆動型プログラミングであることを明らかにしました。私の質問の本質は次のとおりです。データにスクリプトを含めることができるようにデータ駆動設計を実装し、メインプログラムコードを変更せずに新しい武器で新しいことを行えるようにする方法はありますか。

3
ゲームエンジンとデータ駆動設計
データ駆動設計について聞いたことがあり、しばらくの間それについて研究を続けてきました。そのため、概念を理解するためにいくつかの記事を読みました。 記事の1つは、Kyle Wilsonが作成したData Driven Designです。。彼が説明したように、アプリケーションコード(メモリ、ネットワークなどのリソースを制御するためのコード)とゲームロジックコードを分離し、ゲームロジックコードを外部データソースによって駆動する必要があるように思えます。この時点で、開発者はゲーム内オブジェクトに関する外部データ(キャラクター情報、武器情報、マップ情報など)を受け入れる何らかの種類のゲームエディターを作成することを想像できます。シナリオ設計は、プログラマーが作成したカスタム言語/ツールによってスクリプト化され、ゲームデザイナーがゲームオブジェクト間の相互作用を作成できるようにします。ゲームデザイナーは、既存/カスタムスクリプト言語を使用してゲームのスクリプトを記述するか、ツールをドラッグアンドドロップしてゲームワールドを作成します。私が考えることができるツールのアプローチの例は、通常Bliizardのゲームと一緒にパッケージ化されたWorld Editorです。 ただし、別の記事では、データドリブンデザインの使用、データドリブンデザインに対するケースに反対しています。ゲームの設計者にはプログラミングの負担があるため、ゲームの開発に時間がかかるため、著者はゲームの設計をデータで駆動させないことをお勧めします。代わりに、スケッチデザインからゲームを自由にプログラムするゲームプログラマーが存在し、ゲームプログラミングの終了後にゲーム設計者によって検証されます。彼はこれがプログラマー主導であると呼んでいます。この方法について私が思うことは、私がかつて行った方法に似ています:ゲームロジックは、上記のアイデアと同様に、アプリケーション自体であり、アプリケーションはゲームエディターであり、実際のゲームはツールに基づいて設計されています。 ゲームコンポーネントは多くのプロジェクトで再利用できるため、私にとっては、最初の方法の方が合理的だと思われます。データ駆動設計に反対する2番目の方法では、ゲームコードはそのゲームにのみ属します。これが、WarcraftにはオリジナルのWarcraftやさまざまなカスタムマップなど、非常に多くのゲームジャンルがあり、最も有名なものの1つである、実際に新しいジャンルを定義するDOTAがあると思う理由です。このため、World Editorをゲームエンジンと呼ぶ人がいると聞きました。これはゲームエンジンがどうあるべきか本当ですか? したがって、これらすべての後、これらのアイデア(データ駆動型、プログラマー駆動型、スクリプト作成など)についての私の理解に欠陥があることを確認したいだけです。

1
拡張可能なアセット読み込みシステムをどのように構築すればよいですか?
Javaの趣味のゲームエンジンの場合、シンプルだが柔軟なアセット/リソースマネージャーをコーディングしたいと思います。資産は、音、画像、アニメーション、モデル、テクスチャなどです。数時間のブラウジングといくつかのコードの実験の後、私はまだこのことを設計する方法がわかりません。 具体的には、特定の資産タイプがどのようにロードされ、どこから資産がロードされるかを抽象化するような方法でマネージャーを設計する方法を探しています。他のプログラムがそれについて知る必要なしに、ファイルシステムとRDBMSストレージの両方をサポートできるようにしたいと思います。同様に、XMLであるアニメーション記述アセット(FPS、レンダリングするフレーム、スプライトイメージへの参照など)を追加したいと思います。XMLファイルを見つけて読み取り、AnimationAssetその情報を持つクラスを作成して返す機能を備えたクラスを作成できるはずです。データ駆動型の設計を探しています。 私は上の多くの情報を見つけることができますどのような資産運用会社がすべきではなく、上でどのようにそれを行います。関連するジェネリックは、何らかの形のクラスのカスケード、または何らかの形のヘルパークラスをもたらすようです。しかし、個人的なハックやコンセンサスのように見えない明確な例を見たことはありません。

1
OpenGLで頂点を描画する最も効率的な方法
私はOpenGL 3Dゲームを書いています。地形や使用中のオブジェクト用の多数の三角形があります。 私はOpenGL公式ガイドから勉強していて、最初に提示された方法は、描画したい各頂点のglVertex後に関数を呼び出すglBeginことです。 ただし、何千もの三角形を描く必要がある場合、この方法はかなり古くて非効率的です。各フレームで変化しない情報をグラフィックカードのメモリに保存する方法があるので、各フレームをレンダリングすると、その情報はすでにそこにあります。より「不安定な」情報については、おそらくフレームごとに新しい頂点データを送信する必要があるため、別の手法の方が効率的かもしれません。 私の質問に来ます:頂点情報をハードウェアに送信し、レンダリングするための指示を与えるために使用される最も近代的で効率的なOpenGL関数と技術の明確な説明をお願いします。 フレーム中にめったに変化しない頂点データをレンダリングするための順序を送信するための最良の方法とOpenGLツールは何ですか(私は地形とオブジェクトについて考えます)、フレーム中に大きく変化する頂点データを送信するための最良の方法は何ですか?

1
コンポーネントプールの問題の処理-エンティティサブシステム
アーキテクチャの説明 エンティティシステムを作成(設計)していて、多くの問題に遭遇しました。私はそれを可能な限りデータ指向で効率的に保つようにしています。私のコンポーネントは、同種のプールに割り当てられたPOD構造(正確にはバイトの配列)です。各プールにはComponentDescriptorがあります。コンポーネント名、フィールドタイプ、フィールド名のみが含まれています。 エンティティは、コンポーネントの配列へのポインタにすぎません(アドレスはエンティティIDのように機能します)。EntityPrototypeには、エンティティ名とコンポーネント名の配列が含まれています。最後に、コンポーネントプールで機能するサブシステム(システムまたはプロセッサ)。 実際の問題 問題は、いくつかのコンポーネントが他のコンポーネントに依存していることです(モデル、スプライト、PhysicalBody、アニメーションは変換コンポーネントに依存します)。これは、コンポーネントの処理に関して多くの問題を引き起こします。 For example, lets define some entities using [S]prite, [P]hysicalBody and [H]ealth: Tank: Transform, Sprite, PhysicalBody BgTree: Transform, Sprite House: Transform, Sprite, Health and create 4 Tanks, 5 BgTrees and 2 Houses and my pools will look like: TTTTTTTTTTT // Transform pool SSSSSSSSSSS // Sprite pool …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.