ゲーム開発

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

3
軽量のLANピア発見のためのソリューション?
純粋にクロスプラットフォームプログラミング用のライブラリを構築しました。それで作られた私のゲームは、Android、PC、Linux、Macなどでうまく動作します。 ネットワーキング機能はENETライブラリによって提供されるため、アプリ間のすべての通信はTCPまたはUDP互換ではなく、カスタムプロトコルのみで行われ、最終的にはUDPに基づいたものでさえ困難です。 私がENETでやりたいことができるとは思えないので、ここで助けを求めます! Androidフォン、ラップトップ、PCで同じゲームを実行しているとしましょう。Wifiホットスポット(?)でも家庭用ルーターでも、それらはすべて同じwifiネットワーク内にあるため、LAN内にあります。 ネットワーク内の他の2つを検出するには、これら3つのピアがそれぞれ必要です。これは、LANネットワークで生きているアプリのIPを見つけて、それらの間でマルチプレイヤーゲームをホストできるようにすることのみを目的としています。 これを行うには、UDPブロードキャスト、応答待機の1つの効果的な方法しか考えられませんが、それが解決策である場合は、実装の唯一の目的であるため、小さなものが必要です。 他の方法は、LANアドレスのサブ範囲内のすべてのIPに接続しようとすることですが、これはOSが私と一緒にいるとは思いません:p

3
宝石をちりばめた次の最高の宝石の選択
私が使用できるゲームデザインテクニックはありますか?すなわち。ゲームは不可能なシナリオを含んではいけません。 私が推測する限りでは、すべての宝石と、3または4の宝石グループが溶解した後にユーザーにどこを与えるかによって異なります。 出来ますか ? An always infinitely solvable Bejewelled game?

1
カーマックのリバース特許をどうやって回避するのですか?
どうやら、クリエイティブはカーマックのリバースの特許を持っており、彼らは成功したソースの低下のために彼らのテクニックを修正するためのIDを余儀なくさだけでなく、ドゥーム3にEAXを含めること。 しかし、カーマックのリバースは頻繁に議論されており、明らかに遅延シェーディングに適しているため、他の多くの高予算のプロダクションでもおそらく使用されています。 Creativeが小規模の企業を追い求めることはまずありませんが、より大きなスタジオがこの問題をどのように回避するのか疑問に思っています。彼らはただ指を交差させて、クリエイティブがそれらを荒らさないことを願っていますか、それとも彼らは単にカーマックのリバースをまったく使用しませんか?


3
エンティティコンポーネントシステムベースのエンジン
注:これはJavaScriptでプログラミングしていますが、ほとんどの場合、言語に依存しないはずです。 エンジンをECSベースのエンジンに変換することを考えています。 私は基本的なアイデアを得ます(注:これは間違っています、私の答えを参照してください): エンティティはゲームオブジェクトです。 コンポーネントは、エンティティに「接着」できる機能(reactToInput())または状態(position)のビットです。 システムには、管理および更新するエンティティのリストがあります。 しかし、私は実装といくつかの詳細を取得することを完全に確信していません... 質問:システムはさまざまな種類のエンティティで動作できますか?私は通常Scene、エンジンで呼び出されるクラスの例を示しますが、これもこの目的に役立ちます。シーンは、レンダリング、更新、レンダリング(ライト)に影響を与える可能性のあるすべてのオブジェクトのコンテナであり、将来的には2DSoundEmitterオブジェクトも含まれる可能性があります。それは高レベルのインターフェースを持っているので、ユーザーは自分が使用しているオブジェクトのタイプscene.add()や、そのようなすべてのものについて心配する必要はありません。 私はそれがSceneシステムかもしれないことを理解しています。エンティティを取り込んで格納し、更新メソッドを呼び出して、状態を変更することもできます。しかし、問題があります。上で説明したように、にはさまざまなタイプのオブジェクトをScene供給することができます。たとえば、シーンにレンダリング可能なオブジェクト(「ドローアブル」)とライトの両方が含まれている状況ではどうすればよいですか?相互作用する前にエンティティを型チェックする必要がありますか?または、さらに低いレベルで解決する必要があります。任意のオブジェクトに追加できるコンポーネントを作成すれば、ライトはとコンポーネントを持つエンティティになります。それは受け入れられますか?LightSourceLightSourcePosition また、従来の継承と従来のクラスを引き続き使用することは良い習慣ですか?たとえば、自分Rendererがどうなるかわからない!これはシステムではありません。唯一の機能は、カメラとシーンを取り込み、すべてをレンダリングして、エフェクト(シャドウなど)を適用することです。また、ゲームのコンテキスト、幅、高さを管理し、翻訳を行います...しかし、それはまだシステムではありません! 編集: ECSで見つけたリソースをリンクできますか?良いものを見つけるのに苦労しています。

2
フレームレートの制限
最も成功した競争力のあるゲームエンジンが好きでid Tech、GoldSrc、Sourceおよびなどは、フレームレートの制限が可能になります。 30、60、99、72、68などでプレイできます。つまり、上限を設定して上限を制御できます。 フレームレートをどのように制限しますか? コードではなく理論に興味があります。

3
初めてのシャドウマッピングの問題
OpenGLでシェーダーを使用して初めて基本的なシャドウマッピングを実装しましたが、いくつかの問題に直面しています。以下に、レンダリングされたシーンの例を示します。 私がフォローしているシャドウマッピングのプロセスは、光の視点からのビューマトリックスと、通常のレンダリングに使用される投影およびモデルマトリックスを使用して、シーンをフレームバッファーにレンダリングすることです。 2番目のパスでは、上記のMVPマトリックスをライトの視点から、位置をライトスペースに変換する頂点シェーダーに送信します。フラグメントシェーダーは遠近法による分割を行い、位置をテクスチャー座標に変更します。 これが私の頂点シェーダーです、 #version 150 core uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 MVPMatrix; uniform mat4 lightMVP; uniform float scale; in vec3 in_Position; in vec3 in_Normal; in vec2 in_TexCoord; smooth out vec3 pass_Normal; smooth out vec3 pass_Position; smooth out vec2 TexCoord; smooth out vec4 lightspace_Position; void main(void){ pass_Normal …

2
シーン内の多くのライトを処理する(シェーダーを使用)
シーンで多くのライトを処理する方法に興味があります。ダンジョン(ライトがそこにある)などのロールプレイングゲームの非常に大きなマップを考えると、遅延照明については知っていますが、それは多くのライトをレンダリングする方法にしか答えません。しかし、私の質問は次のとおりです。多くのライトをレンダリングしない方法。シーンに影響を与えるライトのみをレンダリングすることが明らかに望ましいですが、これをアーカイブするためのテクニック/アルゴリズムはわかりません。地図のどこかにあるからといって、500のポイントライトをレンダリングすることを望んだり、レンダリングしたりすることはできません。しかし、光からプレーヤーまで直線を取り、その間に何かがあるかどうかをテストすることはできません。距離も良い指標のようには見えません。(日光?) tl; dr:どのライトがシーンに影響を与えてそれらをレンダリングするだけなのか、どうしたらわかりますか?

3
リアルな人間の顔のランダム生成
現実的に見える人間の顔を大量に生成する実用的な方法は何でしょうか?3Dモデルをランダム化してレンダリングするには、特にアドホックベースでそれらを必要とするため、大量の計算能力が必要になります。2Dで描画された個々のパーツをレイヤー化するには、芸術的な才能が必要です。また、世代プロセスのできるだけ多くの側面をパラメーター化したいと思います。これに対処する方法について何か提案はありますか?

4
円衝突内の円
私のプロジェクトの1つに、円形のゲームエリアがあります。この円の中に別の小さな円が動き回っています。私がしたいのは、小さな円が大きな円の外に移動しないようにすることです。下のフレーム2では、小さな円の一部が外側にあることがわかります。外側に移動する直前に戻す方法が必要です。これはどのように行うことができますか? また、小さな円の速度を更新できるように、大きな円の円弧に沿った衝突点が必要です。この点を計算するにはどうすればよいでしょうか? 小さな円を移動する前に、次の位置を予測し、それが外にある場合は、t = 0とt = 1(t = 1フルタイムステップ)の間の衝突時間を見つけます。衝突時間tがある場合、フルタイムステップではなく、tの間に小さな円を移動するだけです。しかし、繰り返しになりますが、問題は、2つの円ともう1つの円の内側に衝突したときに衝突が発生したときに、その検出方法がわからないことです。 編集: 衝突点の例(緑)見つけたい。たぶん写真は少しずれているかもしれませんが、あなたはアイデアを得ます。

1
ゲームプログラミング:一般的な方法とデザインパターン[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 私はOpenGL 3.xをよりよく学ぶことができるように非常にシンプルなゲームエンジンを書き始めましたが、3Dゲームの設計方法に関する経験が乏しく、まばらな知識なので、通常、クラスを設計する必要があることに気づく問題に直面します。違う。私が直面している他の問題は、ゲーム内で時間を簡潔に追跡し、必要に応じて動きを更新する方法と、レンダラーに再描画が必要であることを伝える方法です。また、オブジェクト間でさまざまなフラグを渡すためにGet関数とSet関数を作成する必要がありますが、これは悪い習慣ですか? だから、タイトルが言うように、私は私を助け、ゲームデザインのいくつかの一般的なデザインパターン(つまり、ゲーム状態ハンドラー、フォントなど)を説明する本や記事/チュートリアル、ソースに興味があります。 ところで、私はまだfreeglutを使用していますが、先に進む前に、またはOpenGLをよく理解した後で、より良いウィンドウシステムに移行することをお勧めしますか?

5
さまざまなタイプのエンティティのリストの管理-より良い方法はありますか?
私はモバイルデバイス用の2Dスペースゲームを開発していますが、それは非常に複雑になり、私のソリューションは本当に混乱し、多くの繰り返しコードセグメントを生成します。 私は次のような異なるオブジェクトの複数のリストを持っている世界クラスを持っています: List<Enemy> enemys; List<Projectile> projectiles; List<Collectable> collectables; List<Asteroid> asteroids; List<Effect> effects; .. 各リストは、ワールドクラスによって更新されます。しかし、それだけではありません。各敵には、エンジンのリストと、敵によって更新される武器ランチャーのリストがあります。これで、各エンジンがいくつかの火の効果をワールドリストの「効果」に追加し、各武器の発射者が発射物をワールドリストの「発射体」に追加します。これらすべてのクラスには異なるパラメーターがあるため、クラスごとに追加の更新と追加のレンダリング関数が必要です。 少なくとも、それらはすべて「GameObject」の子であり、位置、速度、加速度ベクトル、境界ポリゴン、applyForceや有限状態マシンなどの関数などの基本的なものを提供します これを行うためのより良いまたはより一般的な方法はありますか?すべての異なるオブジェクトのすべての可能なパラメーターとメソッドを含む1つのキャッチオールクラスのように。(これはさらに混乱するコードを生成すると思います)

8
プラットフォーマーのキャラクターが壁のタイルでクリッピングしないようにするにはどうすればよいですか?
現在、私は地形のタイル(Cave Storyから借りたグラフィック)を備えたプラットフォーマーを持っています。ゲームはXNAを使用してゼロから作成されているため、既存のエンジンや物理エンジンは使用していません。 タイルの衝突はこの回答で説明されているとおりに正確に説明され(長方形と円の単純なSATを使用)、すべてが正常に機能します。 落下/ジャンプ中にプレーヤーが壁にぶつかった場合を除きます。その場合、彼らはタイルに引っ掛かり、実際にはない床や天井にぶつかったと思い始めます。 このスクリーンショットでは、プレーヤーは右に移動しており、下に落ちています。したがって、移動後、衝突がチェックされます-そして最初に、プレイヤーキャラクターが床から3番目のタイルに衝突し、上に押し出されていることがわかります。第二に、彼は自分の隣のタイルと衝突して横に押されていることがわかりました-最終的にプレイヤーキャラクターは自分が地面にいて落下していないと考え、タイルに走っている限り「キャッチ」します。 。 タイルを上から下に定義することでこれを解決でき、スムーズに落下しますが、逆のケースが発生し、壁に上向きにジャンプすると、そこにない天井にぶつかります。 これを解決して、プレイヤーキャラクターが壁に沿って落下するようにするにはどうすればよいですか?

4
フルスクリーンクワッドでレンダーターゲットにピクセルパーフェクトレンダリング
一連の値をレンダーターゲットにレンダリングするときに問題が発生します。値が、希望する正確な範囲になることはありません。基本的に、フルスクリーンクワッドとピクセルシェーダーを使用してレンダーターゲットテクスチャにレンダリングし、テクスチャー座標をシェーダーでのいくつかの計算の基礎として使用するつもりです。左上隅の(0,0)から右下隅の(1,1)までのクワッド範囲のテクスチャ座標...問題は、補間後、これらの値がピクセルシェーダーに到達しないことです。 。 例: 4x4テクスチャにレンダリングし、この場合のシェーダーは、赤と緑のチャネルでテクスチャ座標(u、v)を出力するだけです。 return float4(texCoord.rg, 0, 1); そこから取り出したいのは、左上のピクセルがRGB(0,0,0)であり、したがって黒であるテクスチャであり、右上のピクセルがRGB(255,0,0)であり、したがって明るい赤と左下のピクセルはRGB(0,255,0)-明るい緑です。 しかし、代わりに私はこれをここの右側に取得します: (直線四角形レンダリング、補正なし) 左上のピクセルは黒ですが、他のコーナーでは比較的濃い赤と濃い緑しか表示されません。それらのRGB値は(191,0,0)と(0,191,0)です。私はそれがクワッドのサンプリング位置に関係していると強く思います:左上のピクセルはクワッドの左上隅を正しくサンプリングし、UV座標として(0,0)を取得しますが、他のコーナーのピクセルはクワッドの他のコーナー。左の画像でこれを示しました。四角形を表す青いボックスと、上部のサンプリング座標を表す白いドットです。 これで、Direct3D9で画面揃えのクワッドをレンダリングするときに座標に適用する必要があるハーフピクセルオフセットについて知っています。これからどのような結果が得られるか見てみましょう: (DX9のハーフピクセルオフセットでレンダリングされたクワッド) 赤と緑が明るくなりましたが、まだ正しくありません。赤または緑のカラーチャネルで取得できる最大値は223です。しかし今、私はもう純粋な黒すら持っていませんが、代わりにRGB(32,32,0)の暗い黄色がかった灰色です! 私が実際に必要とするのは、この種のレンダリングです。 (ターゲットレンダー、縮小されたクワッドサイズ) 最初の図と比較して、クワッドの右と下の境界線を1ピクセル上および左に移動する必要があるようです。次に、右側の列と一番下の行のピクセルはすべて、クワッドの境界から正しくUV座標を取得します。 VertexPositionTexture[] quad = new VertexPositionTexture[] { new VertexPositionTexture(new Vector3(-1.0f, 1.0f, 1f), new Vector2(0,0)), new VertexPositionTexture(new Vector3(1.0f - pixelSize.X, 1.0f, 1f), new Vector2(1,0)), new VertexPositionTexture(new Vector3(-1.0f, -1.0f + pixelSize.Y, 1f), new Vector2(0,1)), new …

1
高度なグラフィック効果はどのように実装されますか?
WarcraftやTorchlightの呪文のような3D効果がグラフィカルに実装される方法に興味があります。私はDirect3Dの本を書き終えたばかりで、それと3Dグラフィックス全般にかなり慣れていますが、キャラクターに「稲妻」やその他の呪文をグラフィカルに表示させるなど、どうすればよいかわかりません。私はそれが粒子効果またはアニメーション化されたテクスチャ座標に関係していると思います、誰かが私にいくつかのより具体的な洞察を与えることができますか?ありがとう

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