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

データを効率的に使用できるように特定の方法でデータを整理するためのエンティティ。例は、配列、オブジェクト、レコード、構造体です。

5
MMORPGなどの動的な世界を水平方向にスケーラブルにする方法はありますか?
500プレーヤー以上のオープンワールドで、20更新/プレーヤー/秒の速さでデータが変化することを想像してください。前回同様のMMORPGで作業したときはSQLを使用していたため、常にDBにクエリを実行できませんでした。代わりに、すべてのプレーヤーをDBからメモリにC ++オブジェクトとしてロードして使用しました。つまり、垂直方向にスケーリングされました。代わりにそのサーバーを水平方向にスケーラブルにすることは可能でしょうか?その量の更新を同時にサポートするように設計されたデータベースはありますか?

3
高速で正確な2D衝突検出を実装するにはどうすればよいですか?
2つ以上の2Dオブジェクトが衝突しているかどうかを検出する方法はよく知っていますが、衝突をチェックするかどうかを決定する方法に興味があります。以前のプロジェクトでは、すべてのオブジェクトを他のすべてのオブジェクト(O(n ^ 2)レベルの愚かさ)に対してチェックしただけで、滑らかではないゲームプレイが作成されました。 さまざまなフォーラムが、クワッドツリー、Bツリー、および他のあらゆる種類のツリーや構造を思いつくことができます。 衝突をチェックするかどうかを決定するための最も効率的な構造は何ですか?

5
論理ゲームのデータ構造/控除規則/手がかりの十分なセット?
私は、アインシュタインのパズルに似たロジックゲームの開発について考えてきました。これには、新しいゲームのリプレイごとに異なる手がかりが含まれます。 提供する手がかりが一意のソリューションを指すことを保証するために、さまざまなエンティティ(ペット、家の色、国籍など)、控除規則などを処理するためにどのデータ構造を使用しますか? 控除ルールを考えられる手掛かりと一緒にプレイする方法を考えるのに苦労しています。どんな洞察もいただければ幸いです。

3
敵AIが聞こえる音を追加するにはどうすればよいですか?
与えられた: 2Dトップダウンゲーム タイルは2D配列に格納されます すべてのタイルにはプロパティがあります-減衰(レンガは-50db、空気は-1になる可能性があります) これから、ポイントx1、y1でサウンドが生成され、「波及」するように追加したいと思います。下の画像は、その概要を示しています。明らかに、最終目標はAIの敵が音を「聞く」ことができることです。しかし、壁がそれを遮っている場合、音は遠くまで伝わりません。 赤は50dbの減衰がある壁です。 3番目のゲームティックでは、数学を混乱させていると思います。 これを実装する最良の方法は何でしょうか?

3
ゲームエンティティの破棄を処理する適切な方法
エンティティのロードとロードが常に動的にロードされるゲームの世界を想像してみてください。それをエンティティのリストとして表すことができますが、それらを削除することはどうでしょうか? 追加するとき、新しいエンティティを押し戻すことができますが、コンテナ内の任意の場所を削除する必要がある場合があります。要素を検索して削除する位置を見つけるのを避けるには、どのような選択肢がありますか? エンティティIDをコンテナ内の位置として保存して、直接削除するためのパスを作成できると考えましたが、何らかの相互依存関係「障害」を生成しませんか? 私は正しい方法がList.RemoveAt(whereToRemove);のようなものになることを知っています。しかし、エンティティのみがいつ死ぬべきかを知っている場合はどうでしょうか? それとも私は何かが欠けているのですか?リストコンテナはオブジェクトが破壊されたときにそれを知って自分のサイズを減らしますか?

1
四角形ツリーで形状(長方形)はどのように機能しますか?
クワッドツリーはゲームにとって理想的なデータ構造であると言われましたが、クワッドツリー内でシェイプがどのように機能するかを正確に理解できません。 私はこれをJavaScriptで行っていますが、これらの質問はどの言語の四分木にも当てはまると思います。 基本的な(x、y)ポイントとポイント挿入が四分木でどのように機能するか、そして紙の上でそれを実行できることはほぼ理解していると思います。 ここにあるJSfiddle私はポイントを試してのは。 1つのケースを除いて、ポイントを使用した私のテストは期待どおりに機能しています。 しかし、私の混乱は、長方形のような形状が関係しているときに始まります。形状のある四角形ツリーから取得する場合、形状の各ポイントと、それらがどのノードに分類されるかをチェックしますか?また、各図形の(x、y、width、height)パラメーターを受け入れる場合、図形の挿入はどのように機能しますか?開始点からの幅/高さを使用して他のコーナーポイントを計算してから、適切なノードに分配しますか?挿入された形状が4つのノードにまたがる場合、その形状のデータは4つのノードすべてに保存されますか? そして、検索メソッドが形状をパラメーター(x、y、width、height)として受け入れる場合、実際には何が行われているのでしょうか。挿入する場合、シェイプがどのノードにまたがるかを最初に確認してから、それらのノードのすべてのオブジェクトを取得しますか? 私はJSfiddleで形状を処理していますが、テストの結果に完全に混乱しています。重複したオブジェクトが返されます! たとえば、赤い四角は、私の検索メソッドに入力しているパラメーターに相当する描画です。この赤い四角は4つのノードすべてにまたがるので、四角ツリーのすべてのオブジェクトを返すはずだと思います。しかし、そうではなく、私はそれが何を返すかを合理化するのに苦労しています。現在コメントアウトされている他のテストがいくつかありますが、コメントを外して実行すると、さらに混乱する結果を確認できます。 とはいえ、四分木のすべてのポイントを返す場合、どうすればよいですか?境界全体のサイズの形状を使用する取得メソッド?たとえば、retrieve(0、0、canvas.width、canvas.height)? JavaScriptの四分木ライブラリ私が使用していますので、私は実際の実装が正しいと評判であると仮定し、様々な他のソースによって参照されています。 私の混乱の多くは、四分木の用語の誤解から生じていると思います。同様に、「ポイント」にも幅/高さのパラメーターがある場合、なぜ彼らは寸法ではなく境界と言うのですか?それは慣習/速記の問題ですか、それとも完全に異なる概念ですか? 御時間ありがとうございます!

2
古いゲームのデータ構造
NESのスーパーマリオブラザーズやSNESのスーパーマリオワールドのような古いゲームをプログラミングするときに使用されるデータ構造に興味があります。私の理解は、この時代のゲームは組み立てで書かれたということです。プログラマーはデータ構造を定義/使用しましたか? 例:コインのグループが画面に表示されたら、どのように保存されますか?プログラマーは配列だけを使用しましたか?または、おそらくリンクリストがありましたか? 乾杯! 編集:私はさまざまなアプローチに興味があります...普遍的なアプローチである必要はありません。 編集2:私のゲームのいくつかでは、コレクションに対して(潜在的に悪い)アプローチを使用しており、古いゲームのいずれかが同様のアプローチを使用したかどうかを知りたいです。私は次のことをしたいです: // statically allocated arrays (max number of coins is 4) int coinsXs[4] = {0, 0, 0, 0}; int coinsYs[4] = {0, 0, 0, 0}; // bitset that keeps track of which coins are active int coinsActive = 0; // ... // update the active coins …

1
16×16ピクセルのタイルがそれほど一般的であるのはなぜですか?
タイル(Minecraftなど)が16×16になる理由はありますか? 16はバイナリなので、バイナリと関係があるように感じますが、それは10000偶然かもしれません。 知りたいのは、地形生成を使ってゲームを作りたいからです。タイルの大きさ、またはそれが本当に重要かどうかを知りたいのです。

2
ポイントとサイズをいつ構造体として表す必要がありますか?
私の単純なRuby 2Dゲーム開発フレームワークの一部として、私のゲームオブジェクトには位置(xとyの値)とサイズ(幅と高さ)があります。 class MyGameObject attr_accessor :x attr_accessor :y attr_accessor :width attr_accessor :height ... 私が見た別のアプローチは、位置をPoint構造として扱い、サイズを構造として扱うことでしたSize: Point = Struct.new(:x, :y) Size = Struct.new(:width,:height) class MyGameObject attr_accessor :position # Point instance attr_accessor :size # Size instance ... 一部のフレームワークでは前者を使用します(GDX、Gosuなどだと思います)。他のユーザーは後者(cocos2d-iphone)を使用します。問題は、(ゲーム開発における)両方の動作の長所と短所が完全に明確ではないことです。一部のフレームワークが一方を選択し、もう一方を選択しない理由がわかりません。 考慮すべき重要な違いはありますか?

2
水で満たされた領域を定義するにはどうすればよいですか?
私の小さなゲームエンジンを見栄えの良い水のシミュレーションで強化したいと思います。それに取り掛かるには、ゲームで水を表現する適切な方法を見つける必要があります。残念ながら、私は多くの異なる表現を知りませんので、私はあなたに尋ねます。少し前に私が尋ねた同様の質問があります。しかし、問題を明確に定式化していないので、答えは正しいですが、私が探していたものではありません。 一部のゲームでは、水は高さレベルによって定義されます。たとえば、高さが0未満のすべては水中です。私はこの表現を(主に古い)ゲームで見ました。問題は、浸水していない屋外の洞窟で、湖や海ごとに水位が異なることです。 水の発生のもう1つの、より正確な表現は、粒子です。すべての水滴は、ワールドスペースのポイントとして保存されます。それらをレンダリングするために、メタボールなどの手法を使用して、単一のメッシュを構築することができます。それらの間のダイナミクスを簡単に計算できるので、この表現はリアリズムにとって素晴らしいでしょう。残念ながら、リアルタイムでメタボールの海を計算できるマシンはありませんでした。 エンジンで水を表す他の方法はありますか?動的な湖が欲しいので、静的なジオメトリによって水域を定義することはできません。たとえば、プレーヤーが地形を変更して湖を広げた場合、水はその湾を満たし、その湖の全体的な水位はわずかに低下するはずです。

3
ブール値をパックしてD3D定数バッファーに配置できないのはなぜですか?
了解しました。ブール値をパックしてhlsl定数バッファーに配置するのに苦労しています。その理由はわかりません。 これはhlslのバッファです cbuffer MaterialBuffer : register(b1) { float3 materialDiffuseAlbedo; float materialSpecularExponent; float3 materialSpecularAlbedo; bool isTextured; }; そして、ここはC ++です struct GeometryBufferPass_MaterialBuffer { XMFLOAT3 diffuse; float specularExponent; XMFLOAT3 specular; bool isTextured; }; 私は運が悪いので、ブールを移動し、構造体にさまざまな方法でパディングしました。これを行う正しい方法は何ですか?

2
2Dタイルベースのゲームでは、NPCとタイルはどのように相互に参照する必要がありますか?
トップダウン2Dゲーム用のタイルエンジンを作成しています。基本的に、世界はタイルのグリッドで構成されています。 次に、たとえばマップ上を移動できるNPCを配置したいと思います。 何が一番いいと思いますか: 各タイルには、そのタイル上にあるNPCへのポインター、またはNULLポインターがあります NPCのリストがあり、その上にあるタイルの座標があります。 他に何か? おもう 衝突検出の方が高速ですが、より多くのメモリ領域を使用し、マップ内のすべてのNPCを見つけるのに時間がかかります。 反対です。


3
表示とパスファインディングで同じタイル構造を共有する必要がありますか?
タイル付きの2Dマップを表示する方法を知っています。 A *を使用してパスファインディングアルゴリズムを作成する方法を知っています。 これら2つのことは、構造またはクラスを要求します。私の質問は、表示とパス計算に同じ構造を使用していますか?一部のデータを追加するためのパスファインディング要求のノード構造:x位置、y位置、F、G、Hと親ノード。表示用のタイル構造は、ほぼ1つの情報、つまりタイルの値にのみ最適化できます。 タイルの表示とパスファインディングの両方を処理する大きなクラスを使用していますか、それとも別のメソッドを使用していますか?アドバイスありがとうございます!

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

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