ゲーム開発

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

2
D3D / DXGIは全画面遷移を処理します
D3D11アプリケーションがあり、適切なフルスクリーンサポートを追加したい。これで、DXGIでウィンドウを全画面表示に切り替えることができます。スワップチェーンをブリットする代わりに、フロントチェーンとバックバッファーをフリップするために必要なすべてをDXGIが処理するという印象を受けました。 ただし、DXGIにスイッチを実行させると、マルチモニターセットアップでは信頼性が低いようです。切り替え後のセカンダリ画面は、明確な理由やパターンがないため、長時間にわたって完全に真っ黒のままです。 フルスクリーンウィンドウと残りのデスクトップが他の画面に表示されるまで、数回切り替えて切り替える必要があります。 どうやら私はこれだけではないようですが、Battlefield 3とWoWには多くの人にとって同様の問題があるようです。 さて、実際の質問:これらのAAAゲーム開発会社でさえこれを機能させることができないので、私の最大の望みは、どういうわけか自分でフルスクリーンに切り替えることです。 ウィンドウ/スワップチェーンを適切なバッファフリッピングフルスクリーンモードに上げるためにできることはありますか?

1
GPUとCPUでのメッシュ操作
ちょっと気になります-CPUまたはシェーダーのどこでメッシュ操作を実行しますか?私はCPUですべてを行っており、友人がGPU側に物事を移動することを提案しました。 GPUでボーンアニメーションなどを実行している場合、どうやってメッシュを元に戻すのですか?(私は衝突検出をしているので...)
9 opengl  3d 

1
コンポーネント/エンティティベースの設計+ビヘイビアツリー=>統合方法
私の現在のプロジェクトでは、コンポーネント/エンティティベースのシステムを実装しました。基本的に、このかなり未定義の領域にあるベストプラクティスのほとんどに従っています。 だから私は(少し拡張された)エンティティを取得しました。これは基本的にintID、人間が読める名前、std::mapコンポーネントのa 、およびlong存在するコンポーネントを示すために使用される「タイプインジケーター」です(私はenumすべてのコンポーネントに対して2の累乗を持っています)タイプと、コンポーネントがエンティティに追加されるときはいつでも、ビット単位の演算によってその長さを自動的に変更し、比較しますます。この回答を)。 次に、Componentsもあります。これもかなり単純です。コンポーネントタイプとしてのintID enum、親エンティティポインター、およびstd::mapこのコンポーネントが保持するすべてのプロパティのa です。 最後に、実際のロジック処理を処理するいくつかのシステム/マネージャー。彼らは最初に、現在処理されているエンティティに一致するlong「タイプインジケーター」があるかどうかをチェックします=そのシステムに必要なすべてのコンポーネントが存在します。次に、必要に応じていくつかのプロパティにアクセスし、それぞれのコンポーネントの関数を直接呼び出すか、メッセージディスパッチャを介してメッセージを送信します。 結論:ここまでは、かなり標準的なイベント駆動型のコンポーネント/エンティティベースのシステムとデータ駆動型のアプローチを組み合わせたものです(比較すると、コンポーネントにはハードコードされたデータ変数がなく、(一部の)コンポーネントとして一般的なマップがありますコンポーネントの/ archetypesは後で、実際のコンポーネントコードの一部ではない追加データを追加するオプションを使用してファイルから読み取られます。 次に、そのプロジェクトに(AiGameDev BTSKに基づく)動作ツリーも導入したいと思いますが、それらを既存のコンポーネントにリンクする必要があるかどうか、どのようにリンクするべきか、またはそれらのデザインを一般的に統合する方法はわかりません。 いくつかの関連するアイデア/ポイント/質問が頭に浮かびます: 私のBTはファイルから(再び)読み込まれます。現在BT Action、ツリー内のとアプリケーションの実際のコーディングとの間の接続を最適にする方法を確認するのに苦労しています。BTファイルで使用されるアクション名と実際のロジック実装への関数ポインターとの間に何らかのマップを作成する必要がありますか?それを解決するための通常のアプローチは何ですか? 私はすべての異なるEntityタイプ(つまり、ゲームロジックとAIに関連するコンポーネントの組み合わせのそれぞれについて、何度も言及した長い「タイプインジケーター」で示されるように)に対してBTを作成する必要があると思います。結果として、BT Actionアクションごとに多くのコンポーネントが関与する可能性が最も高いため、コンポーネントに実装を配置することは意味がありませんか? それで、BT Actionロジックは複数の個別のシステムに配置する必要がありますか(アイデア#1からのマップが指し示すメソッドに)。次に、システムは私のlong「タイプインジケーター」ごとにEntity、BTが現在チェックされており、特定のアクション(=システム内のメソッド)の実行が実際に許可されている(=必要なコンポーネントがある)かどうかをチェックします。しかし、そうでない場合(たとえば、BT作成者が特定の状況を見落とし、実行時に必要なコンポーネントがエンティティにアタッチされなくなる可能性があるため)、何も起こりません。 質問: そのような統合のための実証済みの概念はありますか? 上記の3つの点についてどう思いますか? コンポーネント/エンティティベースのデザイン全般に関して、他に思い浮かぶことはありますか?


4
エンジンコンポーネントのコンストラクタとデストラクタにロジックを配置する代わりに、個別の初期化メソッドとクリーンアップメソッドを使用する必要があるのはなぜですか?
私は自分のゲームエンジンに取り組んでおり、現在マネージャーを設計しています。メモリ管理については、コンストラクタとデストラクタを使用するよりもInit()、CleanUp()関数を使用する方が良いことを読みました。 これらの関数がどのように機能し、どのようにエンジンに実装できるかを確認するために、C ++コードの例を探していました。どのように機能しInit()、どのようにしCleanUp()てエンジンに実装できますか?

3
Steam Greenlightの利点
かなりまともなゲームを選んで構築し、十分なクロムメッキで仕上げることができるとしましょう。また、自分のウェブサイトを介して、ある程度自分で販売できると仮定しましょう。 Steam Greenlightを使用する利点は何ですか?私が実際にプロセスを通過し、「グリーンライト」になるのに十分な臨界質量に到達できると仮定します。「緑に照らされた」状態になる、完成した、洗練された、クロムメッキされたゲームが通常どのようになるか知っていますか?統計的に、グリーンライティングは商業的な成功または売上増加と相関していますか? ちなみに、私は私のマーケティングがうんざりしていることを想定しています、そして、Steamは一般的に、あなたのためにいくつかの眼球と売上を獲得します。

2
Rectangle.Intersects()から衝突の詳細を取得する
私はある時点で、次のようなものでボールとパドルの衝突を検出するブレイクアウトゲームを持っています。 // Ball class rectangle.Intersects(paddle.Rectangle); 現在との衝突の正確な座標、またはそれに関する詳細を取得する方法はありますXNA APIか? 衝突の瞬間に各オブジェクトの正確な座標を比較するなど、いくつかの基本的な計算を行うことを考えました。次のようになります。 // Ball class if((rectangle.X - paddle.Rectangle.X) < (paddle.Rectangle.Width / 2)) // Collision happened on the left side else // Collision happened on the right side しかし、これが正しい方法かどうかはわかりません。 皆さんは私がそれを達成するために使用しなければならないかもしれないエンジンについて何かヒントがありますか?または、この方法を使用した優れたコーディング慣行ですか?

2
GOAPシステムでのコストの見積もり
現在、JavaでGOAPシステムを開発しています。GOAPの説明はhttp://web.media.mit.edu/~jorkin/goap.htmlにあります。基本的に、A *を使用して、世界の状態を変化させるアクション間をプロットします。 すべてのアクションと目標を実行するための公正な機会を提供するために、私はヒューリスティック関数を使用して何かを行うコストを見積もります。他のすべてのコストと比較できるように、このコストを見積もる最良の方法は何ですか? 例として、敵から逃げるコストとそれを攻撃するコストの見積もり-コストを比較できるように計算するにはどうすればよいですか?
9 java  ai  path-finding 

3
操縦行動を追跡する際の周回の回避
私はその(静止した)ターゲットを追跡する(そして試みて影響を与える)行動を追跡するミサイルを持っています。 あなたがミサイルを発射するとき、あなたが機銃乱射していない限り、それはうまく働きます。あなたが機銃掃射している場合、ミサイルはその目標を周回する傾向があります。 最初にターゲットに接線方向に加速し、最初に速度の接線成分を削除してから、ターゲットに向けてビーラインすることで、これを修正しました。 したがって、vTがほぼ0になるまで-vTで加速します。次に、vNの方向で加速します。 それが機能している間、私はミサイルが最初に接線コンポーネントを明示的に殺すことなくターゲットに影響を与えることができるよりエレガントな解決策を探しています。

2
LAN経由のAndroidリアルタイムマルチプレーヤー[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私はAndroidプラットフォーム用にいくつかのゲームを開発しましたが、最初のマルチプレイヤーゲームの作成を計画しています。私が念頭に置いているのは、基本的にはローカルエリア接続/ WiFiを介して2台の電話でプレイできる2プレイヤーゲームの魔女だけです。 両方の電話は、3つの整数値を他の電話にリアルタイムで渡すことができる必要があります。これまでのところ、ソケットを使用することを検討しましたが、深く掘り下げる前に、より良いアプローチがあるかどうかを尋ねたかったのですか? ありがとう!

5
速度でぼやけてレンダリングされるスプライト
ゲームにベロシティを追加した後、テクスチャがぴくぴく動いているように感じます。最終的にスクリーンショットでキャプチャするまで、それは私の目だと思いました。 左側はゲームでレンダリングするものです。右側は元のスプライトを貼り付けたものです。(これは6倍に拡大したPhotoshopのスクリーンショットです。) エッジがエイリアシングしていることに注意してください。サブピクセルレンダリングのように見えます。実際、整数値を使用して描画するように私のスプライト(intとして位置と速度を持っている)を強制しなかった場合、MonoGameが浮動小数点値で描画していることを誓います。しかし、そうではありません。 これらがぼやけて表示される原因は何ですか?速度を適用しないと発生しません。 正確には、私のSpriteComponentクラスにはVector2 Positionフィールドがあります。を呼び出すときDraw、私は基本的new Vector2((int)Math.Round(this.Position.X), (int)Math.Round(this.Position.Y))にポジションに使用します。 以前、静止オブジェクトでさえジッターするバグがありPositionましたints。これは、直線ベクトルを使用し、値をに丸めなかったためです。ラウンドの代わりにFloor/ を使用するCeilingと、スプライトはシンク/ホバーします(いずれの方法でも1ピクセルの違いがあります)が、ぼやけて描画されます。

2
レースゲームでのオーバーステアリングの大災害を防ぐ
AndroidでGTA IIIをプレイしたとき、これまでプレイしたほぼすべてのレーシングゲーム(多分マリオカートを除く)で私を困らせていることに気づきました。直進は簡単ですが、カーブは本当に難しいです。車線を変更したり、誰かを追い越したりすると、車は前後に旋回し始め、修正しようとするとさらに悪化します。私ができる唯一のことは、ブレーキを踏むことです。これはある種のオーバーステアリングだと思います。 それがとても苛立たしいのは、現実には私には決して起こらないことです(ありがとう:-))、車内でのゲームの90%は私には現実的ではないと感じます(おそらく本当に良い物理エンジンを持っているにもかかわらず)。私はこれについて数人の人々と話しました、そしてあなたはレーシングゲームを「得る」か、そうでないかのようです。多くの練習をして、いくつかのゲーム(たとえば、Need for Speedシリーズから)で、非常に慎重に運転し、たくさんブレーキをかけて(そして、通常、指にけいれんを起こして)、ある程度うまくいくことができました。 ゲームデベロッパーとして、オーバーステアリングの共振による大惨事を防ぎ、運転を適切に感じさせるために何ができますか?(カジュアルなレーシングゲームの場合、100%リアルな物理学を目指しているわけではありません) また、スーパーマリオカートのようなゲームでは、オーバーステアリングがそれほど多くないように、まったく異なる動作をするのでしょうか。 一つの問題は、キーボードやタッチスクリーン(ホイールとペダルではなく)でプレイする場合、デジタル入力しか持っていないことだと思います:ガスが押されているかどうか、左/右に操縦しているかどうか、そして適切に操縦するのははるかに難しいです。与えられた速度。もう1つは、速度の感覚がよくなく、実際に(安全に)運転するよりもはるかに速く運転することです。私の頭の上から、1つの解決策は、ステアリング応答を速度に応じて変化させることかもしれません。

2
エンティティシステムの多くの動きの原因
私はエンティティシステムのアイデアにかなり慣れていません。たくさんのものを読んだことがあります(最も便利なのは、この素晴らしいブログとこの回答)。 未定義の数のソースによってオブジェクトの位置を操作できるほど単純なものを理解するのに少し問題があります。 つまり、私にはエンティティがあり、これには位置コンポーネントがあります。次に、このエンティティに、指定された時間内に指定された距離を移動するように指示するイベントをゲームで実行します。 これらのイベントはいつでも発生する可能性があり、位置と時間の値は異なります。その結果、それらは一緒に合成されます。 従来のOOソリューションでMoveByは、距離/時間を含むある種のクラスと、ゲームオブジェクトクラス内のそれらの配列がありました。各フレームではMoveBy、すべてのを反復処理して、位置に適用します。がMoveBy終了時間に達した場合は、アレイから削除します。 エンティティシステムでは、この種の動作をどのように再現するべきかについて少し混乱しています。 一度にこれらの1つだけがあった場合、それらを一緒に合成することができる代わりに、それはかなり単純で(私は信じます)、次のようになります。 PositionComponent 含む x, y MoveByComponent 含む x, y, time Entitya PositionComponentとaの両方があるMoveByComponent MoveBySystemこれらのコンポーネントの両方を持つエンティティを探し、の値をMoveByComponentに追加しますPositionComponent。にtime到達すると、そのエンティティからコンポーネントが削除されます。 多くの移動方法で同じことをどのように行うかについて、私は少し混乱しています。 私の最初の考えは、私が持っているだろうということです: PositionComponent、MoveByComponent上記と同じ MoveByCollectionComponentMoveByComponentsの配列が含まれています MoveByCollectionSystemこれは、a PositionComponentとa を持つエンティティを探し、その内部MoveByCollectionComponentのMoveByComponentsを繰り返し、必要に応じて適用/削除します。 これはより一般的な問題だと思います。同じコンポーネントの多くがあり、それぞれに対応するシステムが動作することを望んでいるからです。私のエンティティには、コンポーネントタイプ->コンポーネントのハッシュ内にコンポーネントが含まれているため、エンティティごとに特定のタイプのコンポーネントが1つだけ存在します。 これはこれを見るのに正しい方法ですか? エンティティは常に特定のタイプのコンポーネントを1つだけ持つ必要がありますか?

4
ゲーム内のグラフィックスエンジンと物理エンジンの間でデータを共有する必要がありますか?
いくつかのモジュールで構成されるゲームエンジンを書いています。それらの2つは、グラフィックエンジンと物理エンジンです。 それらの間でデータを共有することは良い解決策ですか? 2つの方法(共有かどうか)は次のようになります。 データを共有せずに GraphicsModel{ //some common for graphics and physics data like position //some only graphic data //like textures and detailed model's verticles that physics doesn't need }; PhysicsModel{ //some common for graphics and physics data like position //some only physics data //usually my physics data contains A LOT …

3
Windows 8は引き続きDirectX 9をサポートしていますか?
Windows 8はDirectX 9をサポートしていますか?私は、Windows 8のために作られたC ++とDirectX 9で書かれたいくつかのサンプルを見ていたのでそれは私がここに(一見それを知っていたようではない、ということhttp://directxtutorial.com/Lesson.aspx?lessonid=111-4-2)。たとえば、COMでのDirectXの初期化: ComPtr<ID3D11Device1> dev; ComPtr<ID3D11DeviceContext1> devcon; 私は古い方法でそれを知っているので、それはただ奇妙です。 ID3D11Device *dev; ID3D11DeviceContext *devcon; (私が伝えたいことをご理解いただければ幸いです) 彼らがリリースした新しいOSのために、それが完全に変わっていないことを願っています。
9 c++  directx  windows 

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