ゲーム開発

プロおよび独立系ゲーム開発者向けのQ&A

5
スプライトアニメーションのベストプラクティス
現実世界の人々がどのようにアニメーションを処理しているかについて、より適切に対処したいと思います。 1つの大きな画像を読み込んでから、アニメーションフレームに基づいて異なる四角形を描画しますか? X画像ファイルを配列にロードし、アニメーションフレームに基づいて配列にアイテムを描画しますか? さまざまなスプライトに対して異なる長さのアニメーションをどのように処理しますか。 キャラクターの歩行には4〜8フレームかかり、ビーチの波には2〜3フレームしかかかりません。その状況にどのように対処しますか?下記参照 Dim Waves(1) as Sprite Dim Char(5) as Sprite Sub Animate() Frame += 1 Draw Char(Frame) Draw Waves(Frame) If Frame = 5 Then Frame = 0 End Sub 明らかに、Wavesは範囲外エラーになります。 または、スプライトが自身のアニメーションを心配していて、フレームをまったく気にしていないのですか。各スプライトに独自のアニメーションループを認識させますか?

7
PCおよびXBox 360開発用のC#で動作するLua APIはありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 去年閉鎖されました。 ゲーム開発に関する本を読んでいます。Luaでゲームのスクリプトを作成する方法を示しています。彼らはLuaをプログラムしてC ++から使用しますが、C#からLuaを使用するライブラリまたはAPIがあるのではないかと考えていました。特にXNAからPC および XBox 360 向けのゲームを開発するには?
18 c#  xna  lua  xbox360  pc 


9
リアルタイムデバッグ手法
変数を微調整し、数分かかるコードをコンパイルし、コードを実行し、微調整が間違った方向にあることを認識し、プロセスを繰り返し実行するルーチンとはまったく異なります。 セッションの進行中にゲームロジックとの対話を開始したいと思います。これをどのように処理しましたか? iOS、C / C ++、およびC#/ XNAのソリューションを聞くことができます。

4
ステルスゲーム用に、興味深いメカニックドリブンパズルを作成するにはどうすればよいですか?
私は現在、Tiny Heistに触発されたターンバイターンパズルステルスゲーム(学生グループプロジェクトとして)に取り組んでいます。基本的な仕組みは、プレイヤーが四角を動かす/何かをするたびに、すべてのNPCも動くということです。 私の目的は、ポータルに似た体験をすることです。プレイヤーは部屋から部屋へ行き、各部屋には入り口と出口があり、間に障害物があります。プレイヤーは、障害物と同様に出口がどこにあるかを見ることができ、障害物を迂回して出口に到達するためにゲームの仕組みを活用する必要があります。 部屋の例は次のとおりです。 警備員が行き来する廊下があります。出口は廊下の終わりにあります。 廊下の真ん中にクローゼットがあります。 プレーヤーは、クローゼットの中に隠れてガードをパトロールし、ガードを通過させ、クローゼットから出て出口に到達する必要があります。 プレイヤーがパズルを解こうとしているときに当惑していると感じてほしい。理想的には、彼らの手の中に解決策があると感じてほしいのですが、彼らはそれを見つけることができません。そして、パズルを解いたら彼らにスマートに感じてほしい。 問題は、その経験を与えるためにパズルを設計する方法がわからないことです。私はいくつかのアイデアを持っていますが、それらのいくつかは楽しい「初期のゲーム」レベルを作るように感じますが、しばらくしてスケッチしているすべてのレベルは同じように退屈に感じます。 Portal 2レベルを設計しようとしたときに同じ問題が発生していました)。 プレイヤーに「Xを実行する必要があるが、Yを取得する前にXを実行できないが、Xを実行せずにYを実行するにはどうすればよいか」と考えるために、メカニズムが相互に重複するレベルを作成したい?」。犬や防犯カメラなどのメカニックを追加できますが、それらを悪用する方法がわかりません。 レベルを設計しようとすると、私が思いついたアイデアは、「進行するにはカメラをオフにする必要がありますが、カメラに到達するには犬に骨を与える必要がありますが、犬を獲得するために警備員の注意をそらす」。これらのアイデアは複雑ですが、浅いです。彼らは、知的に刺激的な(あるいは困難な)レベルにしたいとは思わない。 このステルスゲームコンテキストまたは任意の種類のパズルゲームで、プレーヤーのためにより豊かな問題解決の機会を作成するために、どの方法論またはデザインパターンを適用できますか?


4
エンティティシステムのキャッシュミスと使いやすさ
最近、私は自分のフレームワークのためにエンティティシステムを調査し、実装しています。私は見つけることができるほとんどの記事、reddits、およびそれについての質問を読んだと思います。 ただし、全体的なC ++の動作、エンティティシステムを実装する言語、およびユーザビリティの問題についていくつかの疑問が生じました。 したがって、1つのアプローチは、エンティティにコンポーネントの配列を直接格納することです。これは、データを反復処理するときにキャッシュの局所性を損なうため、実行しませんでした。このため、コンポーネントタイプごとに1つの配列を作成することにしました。そのため、同じタイプのすべてのコンポーネントがメモリ内で連続しており、迅速な反復に最適なソリューションになります。 しかし、実際のゲームプレイ実装のシステムからコンポーネント配列を繰り返し処理する場合、ほとんどの場合、一度に2つ以上のコンポーネントタイプを使用しています。たとえば、レンダリングシステムはTransformとModelコンポーネントを一緒に使用して、実際にレンダリング呼び出しを行います。私の質問は、これらのケースでは一度に1つの連続した配列を直線的に反復していないので、この方法でコンポーネントを割り当てることによるパフォーマンスの向上をすぐに犠牲にするのですか?C ++で2つの異なる連続した配列を繰り返し、各サイクルで両方のデータを使用する場合、問題がありますか? 私が質問したい別のことは、コンポーネントまたはエンティティへの参照をどのように保持する必要があるかです。コンポーネントがメモリに配置される方法の性質は、配列内の位置を簡単に切り替えることができるか、配列が拡張またはコンポーネントポインターまたはハンドルが無効のままになります。フレームごとに変換や他のコンポーネントを操作したいことがよくあり、ハンドルまたはポインターが無効な場合は、フレームごとに検索するのが非常に面倒なので、これらのケースをどのように処理することをお勧めしますか?

2
Age of Empires IIランダムマップのように感じるランダムマップを生成するにはどうすればよいですか?
Age of Empires IIがランダムマップを生成する方法(多様性、適切なバイオームトランジション、混chaを感じずにランダムに感じられるマップ)が好きですが、スタイルを再現するのに苦労しています。たとえば、Perlinノイズを使用しようとしましたが、すべてが均一すぎるか、そうでない場合はPerlin値->地形ヒューリスティックが敏感で壊れやすいため、さまざまなワールドタイプを作成できません。 AoE2マップタイプ「不明」が「100,000個のマップ」を宣伝し、シード番号の使用を示唆していることを覚えていますが、シード番号を使用して見た品種を作成する方法がわかりません。 AoE2ランダムマップのように感じるランダムマップを作成するには、どのアルゴリズムとヒューリスティックを使用できますか? より具体的に編集してください: 私の問題についてさらに考え、AoE2のランダムマップエンジンについて気に入っていることを研究しているとき、私の最大の問題は、地図上の水と植物の分布を管理することだと思います。私はそれを「意味のあるバイオーム遷移」と結びつけていることを知っていますが、それは別の問題です(ただし、Perlinノイズを引き続き使用すると解決が難しくなります)。 私は、AoE2のランダムマップをいくつか追加しました。これらのマップは、自分の努力が再現に失敗している、マッピングエンジンの好きな点を強調しています。すべてのスクリーンショットは、ランダムなマップタイプ「カスタム」->「不明」から取得されます。私は、群島のような特定の地域を使用するようにゲームに指示しませんでした。 さらに以下は、自分のマップエンジンからの画像です。各ピクセルは、1つのAoE2マップタイルに対応します。 私のプロジェクトの複雑な点の1つは、マップをAoE2マップよりも何倍も大きくしたいことです。したがって、私が使用するエンジンは、AoE2が使用するようなマップごとの狭いバイオームのセットではなく、各マップでバイオームの全範囲を作成できる必要があります。 Age of Empires IIマップ 内陸の湖とある種の川のようなものを特徴とする例があります。マップに散在する大量の水が含まれているのが好きですが、その水はまだいくらか濃縮されています-あなたの帝国を構築するために利用可能な土地の大きな帯があります。ゲーム全体を使って水辺の都市を計画する必要はありません。 ゲームが島を横断可能な沼地に接続するのに十分なほどスマートだった同様の例を次に示します。ノイズベースのアルゴリズムがそこに沼地を作成する方法を想像することはできません、それらの場所だけ。また、ゲームで土地がどのように作成されたかに注意してください。各プレイヤーは、最初からすべての土地を所有しています。土地のランダムなパッチを作成しませんでした。次に、各プレイヤーが開始するのにどれが最もひどいものでないかについて、ベストな推測をしました。 この地図は水も多用しますが、内陸の湖はあまり含まれていません。最初の画像と比較してください。AoE2が同じビルディングブロックを使用してまったく異なる地域を作成する方法が気に入っています。パーリンノイズを使用する私の試みはここで失敗しました-私は、土地の塊を萎縮させる広大な広大な海、または10,000の湖の土地を得ます。また、島と接続された大陸の両方を取得するのは難しいと感じました(北アメリカ/南アメリカを考えてください)。 この画像とその上の画像を比較してください。彼らは、地図の乾燥が水位に依存しないことを示しています。最初の画像は、ほとんど水がなく、森林と草が含まれている地図を特徴としています。2番目の画像には適度な量の水が含まれていますが、砂漠です。それが可能だと思います(あなたの世界にニューメキシコまたはサハラとコスタリカの両方があると考えてください)。 自分の地図 多くの場所で、マップを作成する良い方法は、それぞれ異なるデータの次元を表す複数レベルのPerlinノイズを重ねることです。一般的な推奨事項に従って、私はここでウィテッカーテーブルから地形タイプを選択して、標高と湿度を調整しました。 2つのperlinマップを取得し、それぞれの値を単純なを介して整数に量子化しif perlin_val < x { i=some_int } else if perlin_val < y...、(標高、水分)整数ペアを地形タイプのテーブルにマッピングしました(例:[1,0]-> tropical desert、[1,1 ]->草原)。このシステムには海洋が含まれていました-標高= 0の海洋が定義されています。 さまざまなバリエーションがあり、多くの点で実世界のように感じられますが、いくつかの問題があります。 まず、海の深さにパターンはありません。海岸近くの浅い水とさらに深い水が期待できますが、どこにどこにいるかについての韻や理由はありません 第二に、水はすべて海洋に集中しています。湖や川はありません。Perlinのノイズは、大陸の中央で突然低い値に落ちないからです。 各バイオームの量のバランスをとることは非常に困難です。私はこれを次のものに帰します。 パーリンノイズは正規分布に従うため、各次元マッピングの確率を調整する方法を推定することは困難です。 複数の次元のバランスを取ることは困難です-多分(2,3)が欲しいので、(n、3)を得る確率を上げます。さて、今私は(3,3)が多すぎて、すべてが間違っているように見えます。 滑らかなデータを得るのに十分なほどノイズをズームすると、Perlin値の完全なサンプルが得られませんでした。そのため、目の前のマップの分布を微調整し、新しいランダムマップをリロードして、非常に異なる結果を得ます。 私は、Perlin値の3番目のセットから水を作ることによって、川/湖の問題を解決しようとしました。バイナリの水/土地の決定。その後、上記のものをすべて土地に適用します。これにより、配水を非常に簡単に制御できるようになりますが(完全ではありませんが、より優れています)、意味をなさない多くのバイオーム遷移があるという問題が生じます。例えば、緑豊かな草原の真ん中の砂漠の不可解なパッチ、浜辺の雪など。また、上記の理由から、土地のバイオームの割合を制御することはまだ困難です。 上記の問題を見て、Perlinノイズを1次元にのみマッピングする単純なアルゴリズムを試しました。現在、0 =深海-> 1 =浅い海-> 2 …

5
ゲームオブジェクトはどのようにお互いを認識する必要がありますか?
ゲームオブジェクトを多形であると同時に多形ではないように整理する方法を見つけるのは難しいと思います。 例は次のとおりです。すべてのオブジェクトにupdate()とが必要であると仮定しますdraw()。そのためには、GameObjectこれら2つの仮想純粋メソッドを持つ基本クラスを定義し、ポリモーフィズムを開始させる必要があります。 class World { private: std::vector<GameObject*> objects; public: // ... update() { for (auto& o : objects) o->update(); for (auto& o : objects) o->draw(window); } }; updateメソッドは、特定のクラスオブジェクトが更新する必要がある状態を処理することになっています。事実は、各オブジェクトが周囲の世界について知る必要があるということです。例えば: 鉱山は誰かが衝突しているかどうかを知る必要があります 兵士は、他のチームの兵士が近くにいるかどうかを知る必要があります ゾンビは、半径内で最も近い脳がどこにあるかを知っている必要があります 受動的相互作用(最初の相互作用のような)の場合、衝突検出は、衝突の特定のケースで何をすべきかをオブジェクト自体に委任できると考えていましたon_collide(GameObject*)。 他のほとんどの情報(他の2つの例のように)は、updateメソッドに渡されたゲームワールドによって照会できます。現在、世界はオブジェクトのタイプに基づいてオブジェクトを区別しません(すべてのオブジェクトを単一のポリモーフィックコンテナに格納します)。したがって、実際に理想的に返さworld.entities_in(center, radius)れるのはのコンテナですGameObject*。しかしもちろん、兵士は自分のチームから他の兵士を攻撃したくはありませんし、ゾンビは他のゾンビについては言いません。そのため、動作を区別する必要があります。解決策は次のとおりです。 void TeamASoldier::update(const World& world) { auto list = world.entities_in(position, eye_sight); for (const auto& e : list) …
18 c++  architecture 

2
XNA 2dカメラスクロール-マトリックス変換を使用する理由
レベルを常にスクロールさせるテストゲームを作成しています。この効果を作成するために、vector2の位置と列挙方向を保存するだけのカメラクラスを確立しました。また、単に移動する位置を固定レートで変更する「移動」するパブリックメソッドも含まれています。次に、描画時にタイルの配列をループするときにこの位置を使用します。これはすべて正常に動作します。 ただし、カメラを移動するには変換行列を使用する必要があり、スプライトバッチを開始するときにこれを指定する必要があると言われました。私は少し混乱していますa。)これがどのように機能するのですか?スプライトバッチが開始されたときにのみそれを与えているかのように、どのように位置を変更し続けることがわかりますか?b。)タイルをループするときにカメラ位置が必要なのはなぜですか? 現時点では機能しませんが、それがどのように機能するかを完全に理解していないので、それは驚くことではありません。現在、私の試み(コードに従う)では、描画されるタイルが変更されます。つまり、カメラの位置は変更されますが、ビューポートの位置は変更されません(つまり、カメラの原点)。どのように使用されるべきかについてのアドバイス/ガイダンスを本当に感謝しますか? カメラ: class Camera { // The position of the camera. public Vector2 Position { get { return mCameraPosition; } set { mCameraPosition = value; } } Vector2 mCameraPosition; public Vector2 Origin { get; set; } public float Zoom { get; set; } public float Rotation { get; …

2
C ++ Entity-Component-Systemsのコンポーネントに適切にアクセスするにはどうすればよいですか?
(私が説明しているのは、この設計に基づいています:エンティティシステムフレームワークとは何ですか?、下にスクロールすると見つかります) C ++でエンティティコンポーネントシステムを作成するときに問題が発生します。コンポーネントクラスがあります。 class Component { /* ... */ }; これは実際には、他のコンポーネントを作成するためのインターフェースです。したがって、カスタムコンポーネントを作成するには、インターフェイスを実装し、ゲーム内で使用されるデータを追加するだけです。 class SampleComponent : public Component { int foo, float bar ... }; これらのコンポーネントはEntityクラス内に格納され、Entityの各インスタンスに一意のIDが付与されます。 class Entity { int ID; std::unordered_map<string, Component*> components; string getName(); /* ... */ }; コンポーネントは、コンポーネントの名前をハッシュすることでエンティティに追加されます(これはおそらくそれほど素晴らしい考えではありません)。カスタムコンポーネントを追加すると、コンポーネントタイプ(ベースクラス)として保存されます。 一方、今では、内部にNodeインターフェースを使用するSystemインターフェースがあります。Nodeクラスは、単一のエンティティのコンポーネントの一部を格納するために使用されます(システムはエンティティのすべてのコンポーネントの使用に関心がないため)。システムがupdate()必要な場合、システムは異なるエンティティから作成されたノードを反復処理するだけです。そう: /* System and Node implementations: (not the interfaces!) */ class …

3
Entity SystemでUI / HUDをコーディングする方法は?
Adam Martin(t-machine)に触発されたEntity Systemのアイデアはすでに得ていると思います。次のプロジェクトでこれを使い始めたいです。 エンティティ、コンポーネント、システムの基本をすでに知っています。私の問題は、UI / HUDの処理方法です。たとえば、クエストウィンドウ、スキルウィンドウ、キャラクター情報ウィンドウなど。UIイベントをどのように処理しますか(ボタンを押すなど)。これらは、すべてのフレームを処理する必要がないものです。現在、UIをコーディングするためにMVCを使用していますが、Entity Systemとの互換性はないと思います。 Entity Systemはより大きなOOPに埋め込まれていることを読みました。UIがESの外にあるかどうかはわかりません。これにどのようにアプローチしますか?

10
Cのみでのゲーム開発。出来ますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私はインドの1年生で、この学期のプロジェクトとして小さなゲームを作りたいと思っています。 私はCが得意で、すぐに習得できますが、完全にC(C ++またはC#なし)でゲームを開発するかどうかを尋ねたいと思いましたが、大学のプロジェクトではCのみを使用するという厳しい要件があります。 私が探しているのは、シンプルなトップビュードライビングゲームです。派手なものは何もありませんし、視覚的なものでさえ単純なキャラクターによって動かされます。たとえば、ユーザーが制御する車はbyで表され、道路の端は一連の|で表されます。どう思いますか?
18 c 

1
UnityでSurfaceペンをサポートする方法は?
私たちのゲームはタッチまたはマウスでうまく機能しますが、Surfaceペンはポインティングデバイスとしてまったく登録されていないようです。ネイティブビルドでUnityのペンをどのようにサポートできますか? Unity Answersサイトのこの質問は、UWPアプリとしてビルドできることを示唆していますが、それは、.NETフレームワークの非常に限られたサブセットに限定することを意味します(具体的には、多くのシリアル化ライブラリを失います)。
18 unity  input  surface 

1
レベルで定義されたオブジェクトの永続状態を実装するにはどうすればよいですか?
私は再接続可能な一連の相互接続されたレベルで構成される2Dメトロイドバニアを開発しています。 各レベルは、さまざまなスプライトクラスのさまざまなオブジェクト(たとえば、敵、ピックアップ、レバーなど)が生成される場所を指定したTiled TMXファイルで表されます。新しいゲームを開始するとき、保存したゲームをロードするとき、またはレベルを変更するとき、ゲームループは適切なTMXファイルを実行し、そのレベルのすべてのオブジェクトを生成します。 レベルの変更は次の方法で処理します。Playerオブジェクトがオブジェクトと交差するPortal場合、change_map()新しいマップ(交差したポータルに関連付けられたマップ)をロードし、プレーヤーを新しいマップ上の適切な位置に配置するメソッドが呼び出されます。 一部のオブジェクトには、レベルの変更とゲームの保存と終了を通じて永続的になりたい状態があります。たとえば、プレーヤーがドアのロックを解除し、ドアの状態属性が「開く」に設定されている場合、プレーヤーが戻ったときにドアが開くようにします。左または右に設定できるレバー、およびその他のさまざまなオブジェクトに似たものが必要です。さらに、プレイヤーがエリアを再訪したときに、プレイヤーが再スポーンしたくないアイテムを収集することがあります。 したがって、私の質問は、この種の永続性をどのように処理できますか? 私はPythonで働いていますが、あなたはそれから抽象化できると思います。

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