ゲーム開発

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

3
GNU GCCはAAAゲームに使用されますか?
GNU GCCは非常に一般的なコンパイラですが、AAAゲームのような大規模なプロジェクトではほとんど使用されていないようです。私には、それは問題なく動作し、問題はありませんでした。しかし、なぜすべてのAAAゲームがIntel Studioなどの商用コンパイラを使用しているように見えるのでしょうか。なぜそれが重要なのですか?また、GNU GCCはIntelだけでなくすべてのシステムのコードを最適化するので、なぜIntel Studioなどに煩わされるのでしょうか。
11 c++  game-industry  c  mingw 

3
物理エンジンでオブジェクトの「飛び出し」やジッターを修正するにはどうすればよいですか?
速度を変更したりインパルスを適用したりするのではなく、重なり合うボディ(現時点では円のみ)の位置を直接修正することで衝突を解決する単純な物理エンジンを持っています。速度は、影響がすでに解決された後、または統合部分の間にのみ変更されます。 オブジェクトのヒープで、上位のオブジェクトがヒープの下部にあるオブジェクトに過度の圧力をかけている(これは暗黙的に存在し、アルゴリズムには圧力モデリングがない)という問題がありました。等 オブジェクトをy座標で並べ替えることでこれを修正したかったので、衝突はボトムアップで解決されました。しかし今、エンジンは実際に静止しているはずのオブジェクトの奇妙な飛び出し動作を示しています(gifを参照) ソースコードを提供するだけでなく、これは何でしょうか?

3
JavaScriptで分岐ダイアログを実装するにはどうすればよいですか?
私は非常に基本的なビジュアルノベルタイプのゲームをJavaScriptで作成しています。私は初心者なので、楽しく学習するためにこれを行っています。計画が悪いため、会話の分岐にたどり着くときに少し問題に遭遇しました。 現在、ゲームのスクリプトを文字列変数に保持し、「#〜」などのタグを使用して各シーンを小さな配列に分割し、ゲームスクリプトが次のようになるようにします。 var script = "Hello World!#~How are you today?" var gameText = script.split("#~"); //gameText[0]= Hello World! これは線形のものに最適ですが、ダイアログツリーでブランチをどのように処理する必要がありますか?この方法は非常に複雑に見えます。各パスの長さを正確に把握する必要があり、変更が必要な場合は頭痛の種になるからです。 これをもっと簡単に行うにはどうすればよいですか?私はゲームをWebランタイムで動作させたいので、バニラJavaScriptに固執しようとしています。

2
Perlinワームによる洞窟生成
私は現在、3Dシンプレックスノイズでボクセル地形のようなMinecraftを生成しようとしています。また、洞窟を実装したいと考えています。 このスレッドでPerlin Wormsのメソッドを見つけました。これは本当に素晴らしい結果を生成します。ただし、チャンクごとにそれを生成する方法についての手がかりはありません。これは可能ですか、それともチャンクごとに洞窟のような類似のワームを生成する代替策はありますか? 編集:これは私が解決する方法がわからない問題です。 Edit2:これは、2Dリッジマルチフラクタルノイズとシンプレックスノイズハイトマップを組み合わせた結果です。まだ少し調整が必要ですが、これはほとんど私が望んでいた結果です。Byte56に感謝します。

4
ボンバーマンのミニマックス
私はボンバーマンゲームのクローンを開発しており、さまざまなタイプのAIを実験しています。最初にA *で状態空間を検索することを使用しましたが、次にMinimaxアルゴリズムで別のアプローチを試したいと思います。私の問題は、私が見つけたすべてのミニマックスの記事が、プレーヤーが交代すると仮定したことです。しかし、ボンバーマンでは、すべてのプレイヤーが同時にいくつかのアクションを実行します。1つのゲームティックで可能なすべての状態を生成できると思いますが、4人のプレーヤーと5つの基本アクション(4移動と爆弾配置)を使用すると、ゲームツリーの最初のレベルで5 ^ 4状態になります。その値は、次のレベルごとに指数関数的に上昇します。何か不足していますか?それを実装する方法はありますか、またはまったく異なるアルゴリズムを使用する必要がありますか?提案をありがとう
11 ai 

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

3
2つのボクセルが相互接続されているかどうかを確認するアルゴリズム
私は次の問題に適したアルゴリズムを探しています:ボクセルの3Dグリッド(空または塗りつぶされている可能性があります)を前提として、隣接していない2つのボクセルを選択した場合、それらが互いに接続されているかどうかを知りたい他のボクセル。 たとえば(2Dで状況を示すため)、#は塗りつぶされた正方形です。 1 2 3 a # # # b # # c # # # 私がa3とc3を選択した場合、それらが接続されているかどうかをできるだけ早く判別したいと思います。塗りつぶされたピクセルを通るa3とc3の間にパスがある場合。(実際の状況は、もちろん3Dボクセルグリッド内にあります。) フラッドフィルアルゴリズムとパスファインディングアルゴリズムを見てきましたが、どちらを選択するかわかりません。どちらも不必要な作業を行います。フラッドフィルはすべてのボクセルを埋めようとしますが、これは必要ありません。パス検索アルゴリズムは通常、最短パスの検索に関係していますが、これも必要ではありません。道があるかどうかを知るだけです。 どのアルゴリズムを使用する必要がありますか? 編集:コメントに基づいて、以下を追加する必要があると思います:ボクセルの内容は事前に不明であり、ボクセルの削除(空にする)によってボクセルのグループが壊れるかどうかを検出するアルゴリズムも必要です2つ以上の小さなグループに分けます。

1
据置デカールの通常の問題
私は延期デカールシステムに取り組んできました。ここまでで、投影パーツを完成しました。つまり、シーン内の何かをクリックすると、デカールがオブジェクトの表面に適切に投影されます。 このシステムに追加したいことが他にいくつかあります。通常のクリッピングと通常のマップされたデカールです。通常のクリッピングは、鋭角に引き伸ばされたフラグメントを破棄するときです。見てここに。これを解決する方法は、Gバッファの法線とデカールの法線との間に大きな差があるフラグメントを破棄することです。これには、Gバッファの通常のテクスチャを読み取る必要があります。 デカール法線マッピングを行うには、デカールの法線(法線マップからの)をGバッファの法線とブレンドする必要があります。では、Gバッファの通常のテクスチャに書き込む必要があります。 これら2つの機能をサポートするために、同じシェーダーパスで通常のテクスチャを読み書きする必要があることは明らかです。残念なことに、これは未定義の動作なので、これらの機能を実装する他の方法があるかどうか疑問に思っています。

1
グラフィックの状態とコンポーネントを管理していますか?
グラフィックスを扱うとき、私はしばしば多くの時期尚早な最適化を行う傾向があります。私が常に従おうとするいくつかの原則があります。 D3Dコンポーネントの数を最小限に抑えます。(レンダリング状態、バッファー、シェーダーなど) どうしても必要な場合にのみコンポーネントをバインドします。(まだバインドされていないなど) コンポーネントをできる限り専門化します。(必要なBindFlagsのみを設定するなど) これにより、作成されたコンポーネントと現在のパイプライン状態を管理するための非常に手の込んだラッパーを構築することになりました。これは私の貴重な開発時間の多くを消費するだけでなく、複雑さをさらに大きくします。 そして最悪の事態: 場合、それがすべてトラブルに値するかどうかさえ知りません。 私の最適化の考慮事項のいくつかは、すでに下位レベルで実装されている可能性があり、それらを複製しているだけで、CPUの時間をさらに浪費しています。パフォーマンスへの影響は無視できるため、他の考慮事項は完全に不要な場合があります。 だから私の質問は: 上記のガイドラインのうちどれが有効で、どの程度遵守する必要がありますか? GPUは状態の変化をどのように処理しますか? 使用されていない状態を変更するとどうなりますか?(アクティブな間は、描画呼び出しは行われません。) さまざまな異なるコンポーネントをバインドするための実際のパフォーマンスペナルティは何ですか? 他にどのようなパフォーマンスの考慮事項を行う必要がありますか? 実際の制限に達するまでは、パフォーマンスについて気にしないでください。それは明らかに実用的な見地からは真実ですが、私は主に理論に興味があります。どういうわけか、最適なグラフィックスフレームワークを構築するという衝動と闘う必要がありますが、通常の「時期尚早の最適化講義」ではそれを実現できないと思います。 コンポーネントの管理 現在、SlimDXをマネージラッパーとして使用して、DirectX 11アプリケーションをC#で作成しています。これは非常に低レベルのラッパーであり、私の現在の抽象化はその上に構築されています。 Direct3D抽象化を使用する場合、いくつかの明らかな利点があります。環境の設定、シェーダーの読み込み、定数の設定、メッシュの描画は、はるかに簡単で、使用するコードが大幅に少なくなります。また、ほとんどのコンポーネントの作成と破棄を管理するため、どこでも自動的に再利用でき、メモリリークをほぼ完全に回避できます。 通常、すべてのグラフィックコンポーネントとリソースをどのように管理しますか? 以下の私の例と同様のことを行うマネージラッパーを推奨できますか? これが私の現在の実装例です。インターフェースにとても満足しています。私のニーズに対して十分な柔軟性があり、使用および理解が非常に簡単です。 // Init D3D environment var window = new RenderForm(); var d3d = new Direct3D(window, GraphicsSettings.Default); var graphics = new GraphicsManager(d3d.Device); // Load assets var mesh = GeometryPackage.FromFile(d3d, "teapot.gp"); …

2
ゴーストの再生-ストレージとタイミング
私はカーレースゲームに取り組んでおり、過去のレースを再生するためのゴーストスプライトを実装しました。私は物理エンジンを使用していて、多くの資料を読んだ後、再生のためにゴーストデータを保存する最良の方法は、たとえばhttps:// gamedevで説明されているように、特定の時点での車の位置と回転を記録することであるという結論に達しました。 stackexchange.com/a/8380/26261。 しかし、リプレイ中にそれらのタイムポイントを見つけるための良い方法は何でしょうか?例は、次のデータを持つレコードです。 time: +3.19932 (seconds since race start) position: 180,40 (position at that time) rotation: 30.4 (rotation at that time) しかし、それにはいくつかの問題があります。 再生すると、3.19932の正確なタイムポイントに再び到達する可能性は低くなります。おそらく、3.1前後のタイムポイントがあり、最も近いレコードを見つける必要があります。補間する場合は、上下の最も近い一致でも。これは非常に非効率的で時間がかかるように思えますか? 後で再生するために、これらのレコードをどのリスト構造に保存できますか?配列?これは、特定の時間に一致するレコードの検索時間が、レースが長くなるほど長くなることを意味しませんか? タイムポイントにはどの頻度を使用する必要がありますか?各フレームは-おそらく-やりすぎです。むしろ、n番目のフレームごとに保存して、その間に補間する必要があります。これにより、2のストレージの質問がさらに難しくなります。 それで、このアイデアは正しいアプローチですか?はいの場合、どのようにしてデータを効率的に保存および取得できますか?私は通常、確定的なゲーム状態やユーザー入力の記録などではなく、上記のデータ構造を使用したいと思います。 助けてくれてありがとう! 編集:私が使用する環境を説明する必要があることを理解しています:Cocos2D for iPhone。方法がありupdate:(ccTime)deltaます。理想的には、このメソッドは1/60秒ごとに呼び出されますが、保証はありません。これはdelta、最後のゲームティックから経過した実際の時間であり、1/60よりもはるかに長い場合と少ない場合があります。このメソッドで、現在のゲーム状態を保存します。

4
Golden Axe、Street、Rageなどの古いゲームはタイルマップを使用しましたか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 ゴールデンアックス(ジェネシス)やストリートオブレイジ(ジェネシス)などの古いゲームで、レベルにタイルマップや背景ビットマップを使用していたのではないかと思います。 これを説明するリソースを見つけることができず、ウェブで背景画像を見つけることができましたが、レベルのタイルマップは見つかりませんでした。もちろん、これは質問には答えませんが、レベル全体に背景ビットマップを使用しているようです。 しかし、それらの古いコンソールがそのような「大きな」画像を保存してレンダリングすることが実用的であったかどうかはわかりません。 それらの古いシステムでのプログラミングについて少し知っていて、それらの「パースペクティブ」レベルがどのように構築されたかを知っている人はいますか?
11 tilemap 

1
途中で色が変わる光を実現するには?
光源と色付きの窓を作ることを考えました。現在、ウィンドウは半透明です。どのようにすれば、光(たとえば、真っ白)がガラスに当たってそれを通過しても、通過したガラスと同じ色に色が変わるようにできますか? ここで説明する効果は、ウィンドウの「色」側にエリアライトを使用することで偽造できることを知っていますが、1つの白色点ライトだけが必要な場合はどうなりますか?
11 opengl  lighting  color 

2
XNA / MonoGame用のポータブルバッファーキーボード入力?
予備的な解決策として、私は現在、バッファーされたキーボード入力のためにC#/ XNAゲームプロジェクトでNuclexフレームワークを使用しています。悲しいことに、nuclexはSlimDX.Directinput.dllに依存しているため、私の知る限り、Windows OSでのみ使用できます。しかし、私は他のプラットフォーム(Linux、OSXなど)をターゲットにするためにMonoGameを使用しているため、すべてのプラットフォーム間でバッファキーボード入力を統合するポータブルな方法を探しています。何かありますか?

6
グラフィックなしでXNAゲームを実行する
何も表示せずにXNAゲームを実行する方法があるかどうか疑問に思います。 私は、1人のプレーヤーがホストであり、他の人が彼のゲームに接続できるクライアントサーバーセットアップで実行される動作中のゲームを持っています。 グラフィックカードのない専用サーバーでホストとしてゲームを実行できるようになりました。基本的に、Draw()ロジックはまったく実行したくありません。 ゲーム全体を実行し、XNAへの参照をすべて削除する必要がありますか? 人々はこれをどのように行いましたか? 編集:私がこれをしたい理由は、ゲームにクライアントサーバーセットアップが機能していて、別個の「ヘッドレス」サーバープログラムを作成したくないためです。
11 xna  xna-4.0 

2
2つのネットワーク化された状態の間の補間?
私はクライアント側に多くのエンティティをシミュレートしていて(それらの速度はフレームごとにそれらの位置に追加されます)、自分で推測させます。彼らは彼らが最後に見られた場所とその速度の変化についての更新を送信します。これは素晴らしい作品で、他のプレイヤーはこの作品を見つけました。ただし、しばらくすると、これらのプレーヤーはしばらくして非同期化を開始します。これはレイテンシが原因です。 状態間を補間して、正しい位置に表示されるようにしたいのですが。プレーヤーが最後に見た場所とその現在の速度はわかっていますが、最後に見た状態に補間すると、プレーヤーが実際に-後方に-移動します。他のクライアントにはベロシティをまったく使用できず、単に適切な方向に向けて「強打」するだけでしたが、これによりジャギーな動きが発生すると思われます。代替案は何ですか?

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