ゲーム開発

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

5
オープンソースゲームで配布できるフォントはどこにありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 ゲームをオープンソースとしてリリースできるようにしたいのですが、ゲームでフォントファイルを配布できるようにする必要があります。この方法で使用できるフォントはどこにありますか?また、どのフォントライセンスを探すべきですか? BSDなどの制限の少ないオープンソースライセンスではなく、GPLでゲームをリリースする場合、さらに考慮すべき点はありますか? 編集:質問が不明であると言っているOlieへの応答:私の主な問題は、インターネットで見つけたフォントがライセンスを明確に述べていないか、ソフトウェアでフォントを配布できるかどうかを明確にしないライセンスを持っていることです。私はフォントライセンスについてほとんど知りませんが、フォントが基本的にオープンソース/クリエイティブコモン/パブリックドメイン/ライセンス料を支払うことなくゲームで配布できる他のフォントライセンスであることを保証するフォントのソースを探しています。

9
タワーディフェンスゲームのダイナミックパスアルゴリズム
私はタワーディフェンスを作っていますが、それには良いパスアルゴリズムが必要です。 私はダイクストラについて考えましたが、ダイナミックなものが必要です。1つのエッジが完全に再計算されずに削除または追加されたときに、それ自体を更新できる必要があります。 役立つ場合は、C#でコーディングしています。

6
球面調和関数を使用して複雑なサウンドスケープを構築する
私は今日、部屋の音響モデリングを改善する方法について職場で議論していました。このテーマに関してはほとんど作業が行われていないように見えますが、グラフィックスでは大量の作業が行われていることが示唆されました。さらに、音と光は単なる波形であるため、レイトレーシングやラジオなどを使用して適切な近似値を取得できる可能性があることが示唆されました。 この時点で、この挙動をシミュレートするために球面調和関数について考え始めました。鏡面反射のような反射と、拡散反射としてモデル化されたオーディオ散乱を同時に行うことができます。おまけとして、音の伝達を妨げる障害物もあります。唯一の問題は、複数の周波数の減衰を処理する方法でした。確かに、これは何らかの形の変換をオーディオスペクトル(FFT)に適用することでモデル化できます。 とにかく、このテーマに関する論文、特にリアルタイムでの実行方法に関する論文を誰もが知っています。誰かがアドバイスや有用な一般情報を得られなかったのですか?

4
UDPを使用した確認応答の信頼性
UDPについて質問があります。コンテキストでは、リアルタイムアクションゲームに取り組んでいます。 私はUDPとTCPの違いについてかなり読みましたが、私はそれらをかなりよく理解していると感じていますが、正しいと感じたことのない作品が1つあります。それは信頼性、特に承認です。UDPはデフォルトでは信頼性を提供しないことを理解しています(つまり、パケットがドロップされたり、順番どおりに到着しないことがあります)。ある程度の信頼性が必要な場合、私が見た解決策(概念的には理にかなっています)は、確認応答を使用することです(つまり、サーバーはクライアントにパケットを送信し、クライアントがそのメッセージを受信すると、確認応答をサーバーに送り返します) 。 確認応答がドロップされるとどうなりますか? 上記の例(1つのサーバーが1つのクライアントにパケットを送信する)では、サーバーはパケットの確認応答が受信されるまでフレームごとにパケットを再送信することにより、潜在的なパケット損失を処理します。それでも帯域幅または順序が乱れたメッセージの問題に遭遇する可能性がありますが、純粋にパケット損失の観点から、サーバーはカバーされます。 ただし、クライアントが到着しない確認応答を送信すると、サーバーは最終的にそのメッセージの送信を停止せざるを得なくなり、そのパケットに含まれる情報が必要な場合、ゲームが中断する可能性があります。サーバーに対して同様のアプローチをとることができます(つまり、ACKに対するACKを受信するまで確認応答を送信し続けますか?)等々)。 ここで私の基本的なロジックは正しいと思うので、2つの選択肢があります。 単一の確認応答パケットを送信し、最善を期待します。 少数の確認応答パケット(おそらく3〜4)を送信し、すべてがドロップされるわけではないと仮定して、最善を期待します。 この問題に対する答えはありますか?基本的に何かを誤解していますか?知らないUDPを使用する保証はありますか?私は自分の論理が健全であると納得するまで、あまりにも多くのネットワークコードを使って前進することをheします。
16 networking  udp 

6
ビデオゲームはどのようにして情報を画面外に保存しますか?
私は最初からビデオゲームを作ろうとしていますが、これは本当に新しく、基本的な問題に直面し続けています。最も重要なのは、ビデオゲームがオフスクリーン情報をどのように保存するかということです。つまり、プログラムは画面に次に表示するものをどのように知るのでしょうか?または、プレーヤーが環境を変更した場合、次に画面にロードするときにこの変更はどのように残りますか? たとえば、New Super Mario Brosで?を押すと、ブロックしてから画面の外に出て、戻ってきても、ヒットしたままです。この情報はどのように保持され、次にプレーヤーがブロックをロードするときに実行されますか?なぜリセットされないのですか?

4
画面上のマウス位置を「マッピング」して、解像度に関係なく衝突検出が機能するようにするのは悪い考えですか?
デフォルトの解像度が800x600のゲームを考えてみましょう。衝突マスクを持つオブジェクトは、サイズ800x600のゲームワールドに配置されます。衝突マスクは、マウスが衝突マスクに衝突したことを検出できます。 次に、ゲームを1024x768に拡大することを考えます(すべてをレイヤーにレンダリングし、レイヤー全体を一度に拡大するだけでグラフィックを拡大すると仮定します)。この新しい解像度でマウスとの衝突を適切に機能させるには、2つのオプションがあります。 A.)ワールドを1024x768に拡大し、それに応じてすべてのオブジェクトのコリジョンマスクを拡大します。 B.)マウスの位置を元の世界(800x600)に「マッピング」します。 「マップ」とは、マウスの位置を元の800x600の世界に単純に拡大縮小することを意味します。たとえば、画面上のマウス位置が(1024、768)の場合、世界のマウス位置は(800、600)です。 明らかに、オプションBの方が計算量が少なく、おそらく幾何学的エラーが発生しにくいかもしれませんが、このメソッドを使用すると予期せぬ結果が生じるため、後で修正する必要があります。 どちらの方法を使用する必要があります:A、B、または他の何か?

10
シードに基づくランダムノイズ
私は現在、ピクセルの「座標」に基づいて画面上にランダムなノイズを生成するプログラムに取り組んでいます。プログラムを再起動するたびに、座標は同じ色になるはずです。ただし、Javaのutil.Randomを使用すると、私が望む結果は私が望むほどランダムではありません。 結合された座標を使用すると(互いに隣接する両方の座標から形成される1つの整数のように)、各座標は異なる数になると思いました。その番号をシードとして使用することにより、各座標に異なる乱数を取得して、その座標のrgb値に使用することを期待していました。 これは私が使用したコードです: public class Generate { static Random Random; public static int TileColor(int x, int y){ Random = new Random(Integer.valueOf(Integer.toString(x)+Integer.toString(y))); int b = 1 + Random.nextInt(50); int g = 1 + Random.nextInt(50); int r = 1 + Random.nextInt(50); int color = -Color.rgb888(r, g, b); return color; } } Javaのランダム関数の動作方法が原因でプログラムが作成するパターンなのか、何か間違ったことをしているのか、別のアプローチを試す必要があるのか​​? …
16 java  random 

4
すべてにインスタンス化を使用しますか?
インスタンス化は、同じメッシュの複数のコピーを一度にレンダリングするとき(大幅に)パフォーマンスを(大幅に)向上させます。しかし、1回の描画呼び出しで正確に1つのコピーをレンダリングする場合、オーバーヘッドはどれくらいありますか?エンジンによってレンダリングされたすべてのジオメトリにインスタンス化を使用するのは良い考えですか、悪い考えでしょうか? 編集:FPSゲームを作成しているとしましょう。ほとんどのオブジェクトには、ナイフ、銃、機関銃、建物、電波塔という1つのインスタンスしかありません。しかし、複数のインスタンスを持つオブジェクトもあります:木(例:数百のインスタンスを持つ3種類の木)、草など...つまり、1つのインスタンスオブジェクトを「伝統的な」方法でレンダリングするのではなく、インスタンス化を使用して草を作成する場合、インスタンス化を使用してすべてをレンダリングします。したがって、無線タワーにはインスタンスが1つしかなく(その情報はインスタンスデータバッファーに格納されます)、DrawInstanced()インスタンスカウントが等しいコールを使用してそのタワーをレンダリングします1。他のすべてのオブジェクトと同じです(もちろん、木や草には複数のインスタンスがあります)。 だから私の質問は次のとおりです。インスタンス化を使用してオブジェクトの単一インスタンスを描画するのは悪い考えですか?インスタンス化のオーバーヘッド(メモリおよびパフォーマンスの面)が大きすぎるのか、それともシングルインスタンスオブジェクトのレンダリングに望ましくないのですか?
16 mesh  instancing 

7
コンピュータグラフィックスに関して使用される場合、「チャネル」という用語は何を意味しますか?
私はコンピューターグラフィックスの用語を勉強していましたが、この声明が出て混乱しました。 画像には、透明度のためのアルファチャンネルを含めることができます。 「アルファチャネル」という用語の意味を検索しようとしましたが、「チャネル」と呼ばれる別の概念を使用した定義に本当に混乱しました。私はこれが何を意味するのかよく分からないので、誰かがこの用語を説明してくれますか?

2
遅延シェーディングレンダラーのジオメトリパスの一般的なレンダリング最適化手法は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 OpenGL 3とC ++(およびウィンドウ管理用のglfw)を使用してゲームエンジンを開発しています。私はこれまでに進めてきましたが、サウンドエンティティと最適化以外のほとんどのことは完了しています。エンジンは遅延シェーディングを使用しているため、遅延シェーディング自体は平均的なGPUにとって疲れるプロセスなので、レンダリングプロセスを可能な限り最適化したいと思います。 現在のシステムは、レンダラーと現在のワールドを含むシーンで構成され、ワー​​ルドはエンティティとライティングエンティティを別々に保持しstd::vectorsます。 そのため、基本的にSceneが呼び出されるたびに->render()、Rendererを呼び出し、ワールドをパラメーターとして渡し、ワールドからエンティティイテレーターを取得し、FBOにそれらを描画してから、2番目のパスのライティングエンティティを通過します。そして、これは十分ではないと思います。 現在のアルゴリズムは、エンティティが画面スペースにない場合でもすべてを繰り返し処理します。現在のレンダリングアルゴリズムを最適化して、可視オブジェクトに対してのみAPI関数を呼び出す方法を考えています。そのようなレンダラーを最適化する一般的な手法は何ですか?

2
3人以上のプレーヤーでEloを使用したプレーヤーのランキング
Eloを使用して、特定のゲームの試合間のプレイヤーランキングを追跡したいと思いますが、ゲームは1つの試合で最大4人のプレイヤーでプレイできます。CarcassonneのようなゲームでEloを使用し、2人以上のプレイヤーがプレイしているのを見てきましたが、1対1のマッチアップ以外ではEloに慣れていません。 ウィキペディアの記事から、拡張したい2人のプレーヤーの方程式は次のとおりです。 E a = 1 /(1 + 10 (R b -R a)/ 400) E b = 1 /(1 + 10 (R a -R b)/ 400) R x new = R x old + 32 *(W – E x)、Xが勝った場合はW = 1、Xが負けた場合はW = 0。 3人以上のプレイヤーがいる場合、E xとWの計算はどのように変わりますか?


2
2つのベクトル間を線形補間するにはどうすればよいですか?
私は、クライアントがどこにいて、どこに行くのかという速度ベクトルを持っています。そして、クライアントがどこにいるかを伝えるサーバーから来る同じベクトルを持っています。時々少し違うので、現在の位置とサーバーの正しい位置の間を補間したいと思います。 黒い矢印はクライアント速度ベクトル、赤い矢印はサーバー上のクライアント速度ベクトル、青い矢印は計算して補間したいものです。 青いベクトルを計算するにはどうすればよいですか?次に、どうすればそれらの間を線形補間できますか?

6
PC以上のものをターゲットにする場合、マウスを念頭に置いて開発する必要がありますか?
かなり簡単な質問ですが、答えはわかりません。 マウスを使用するユーザーコントロールを開発するか、マウスを完全に無視してボタンコントロールのみを使用する必要があります。 例は次のとおりです。 アイテムをクリックしてピックアップするか、アイテムの近くに移動してボタンを押してピックアップします。 特にPC以外のプラットフォームをターゲットにしたい場合、これについてどう思いますか?

1
タイルベースの2Dプラットフォーマーの地形生成
私は現在、Terrariaに似たタイルベースの2Dプラットフォーマーにいくつかの点で取り組んでいますが、地形の生成に苦労しています。基本的なことはいくつか済ませていますが、有用なものとしては出ていません。 Perlin Noiseのようないくつかの異なる手法を試してみて、Midpoint Displacementなどの他のいくつかについて読んでみましたが、どれが最適か、または異なる領域を生成するための異なる手法の組み合わせについてはわかりません。(地形の一般的な形状の場合は中点変位、洞窟の場合はパーリンノイズなど) Accidental Noise LibraryでC ++になっているにもかかわらず、どのようにレイヤー化できるかについての優れた説明を見つけました。また、C#から使用できるDLLにコンパイルするのに十分なC ++がわかりません。私はこれをC#でコピーしようとしましたが、2つの効果(一般的なベースの勾配、次に詳細なフラクタル)を一緒にマージする方法はわかりません。 現在、私はプラズマフラクタルを使用しており、結果は非常に多様です。たとえば、表面がほとんどない地形を生成したり、表面がまったくない地形を生成したりできます。 ただし、大丈夫なマップの例では、さらに改善することで改善されます。(黒は固体、白は空気): ひどい地図の例。(黒は固体、白は空気): 基本的に、私が求めているのは、地形を生成するためのより良い方法であるか、生成時間を可能な限り速くして、合理的な量の表面積があることを確認することです。または、偶然のノイズライブラリと同じ結果をC#で実現する方法もあります。 どんな例でも大歓迎です。

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