ゲーム開発

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

2
OpenGLの原点を画面の左上に変更する場合、何を心配すればよいですか?
自己啓発のために、私はSDL / OpenGLを使用してC ++で2Dプラットフォーマーエンジンを書いています。最初はsdltutorials.comとlazyfoo.netのチュートリアルを使用して純粋なSDLから始めましたが、現在はSDLを使用してOpenGLレンダリングコンテキストを作成し、OpenGL関数でレンダリングしています(特に即時モードですが、VAO / VBOについて学習しています) )。インターフェイス、オーディオなどにのみSDLを使用しています。 SDLは、画面の左上を原点とし、正のy軸を下に向けた座標系を使用します。OpenGLで正投影を設定してこれをミラーリングするのは簡単です。 テクスチャ座標が0から1までの値を持つ右側のシステムであることを知っています-レンダリングする前にテクスチャを垂直に反転(まあ、ロードする前にファイルを反転)すると、正しくレンダリングされるテクスチャが生成されます...描画している場合は問題ありませんテクスチャ全体ですが、最終的にはタイルセットを使用し、問題を想像できます。 これを行うと、レンダリングに関して何を気にする必要がありますか? 誰かが何かアドバイスをしたり、自分でこれを行って将来の落とし穴を指摘したりできるなら、それは素晴らしいことですが、実際にはどんな考えでもありがたいです。
11 c++  opengl  2d  sdl 

2
3Dゲームでターゲットを撃つアルゴリズム
Descent Freespaceを覚えている人にとっては、非ホーミングミサイルやレーザーを撃つときに敵を狙うのに役立つ優れた機能がありました。追跡している船の前に十字線があり、動いているところを撃つためにどこを撃つべきかを教えてくれました。目標。 私は/programming/4107403/ai-algorithm-to-shoot-at-a-target-in-a-2d-game?lq=1からの回答を使用しようとしましたが、それは2D用なので試してみましたそれを適応させます。 最初に計算を分解してXoZ平面の交点を解決し、x座標とz座標を保存してから、XoY平面の交点を解決し、y座標を最終的なxyzに追加してから、クリップスペースに変換してテクスチャを配置しました座標。しかし、もちろん、期待どおりに機能しないか、質問を投稿しなかったでしょう。 XoZ平面でxを見つけた後とXoYでxが同じではないので、何かが間違っていることに気づきます。 float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) - ENG_Math.sqr(projectileSpeed); float b = 2.0f * (targetVelocity.x * targetPos.x + targetVelocity.y * targetPos.y); float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y); ENG_Math.solveQuadraticEquation(a, b, c, collisionTime); 初回のtargetVelocity.yは実際にはtargetVelocity.z(targetPosの場合も同じ)で、2回目は実際にはtargetVelocity.yです。 XoZ後の最終的な位置は crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f, minTime * finalEntityVelocity.z + finalTargetPos4D.z); XoY以降 crossPosition.y …
11 mathematics  ai  aiming 

3
Bulletを使用すると、物理がネットワーク上で正しく同期しない
Bulletを使用してクライアント/サーバーの物理システムを実装しようとしていますが、同期をとるのに問題があります。 ゲームオブジェクトから変換を読み書きするカスタムモーション状態を実装しましたが、ローカルで動作しますが、ネットワーク化されたゲームに対して2つの異なるアプローチを試しました。 サーバー上にも存在するクライアント上の動的オブジェクト(たとえば、ランダムな破片やその他の重要ではないもの)は運動学的に作成されます。これは正しく動作しますが、オブジェクトは非常にスムーズに移動しません オブジェクトは両方で動的ですが、オブジェクトが移動したというサーバーからの各メッセージの後に、線形速度と角速度をサーバーからの値に設定し、サーバーのトランスフォームでbtRigidBody :: proceedToTransformを呼び出します。また、btCollisionObject :: activate(true);を呼び出します。オブジェクトを強制的に更新します。 方法2の私の意図は基本的に方法1を行うことでしたが、方法1をスムーズにするために自分で行う代わりにBulletを乗っ取って貧者の予測を行いましたが、これはうまくいかないようです(理由が100%明確ではないため)私は弾丸を踏んでさえいます)そしてオブジェクトは時々異なる場所に行き着きます。 私は正しい方向に向かっていますか?Bulletには独自の補間コードが組み込まれているようです。それは私が方法1をうまく機能させるのに役立ちますか?または、誤って踏みつけているため、方法2のコードが機能していませんか? 編集:私が気付いた方法1のもう1つの問題は、同期されていないオブジェクトに対する衝突の衝突応答が大幅にずれることです。キネティックボディは、ノックバックできないため、時々無限にシュートするものです。

2
AStarを調整して到達不能な宛先に最も近い場所を見つける
私はJavaでAStarを実装しましたが、選択した目的地に到達できる障害物があるエリアでも問題なく動作します。 ただし、目的地に到達できない場合、計算された「パス」は、最も近い場所(到達できない場所)への経路ではなく、ランダムパスになります。 AStarを調整して、到達不可能な目的地に最も近い場所へのパスを見つける実行可能な方法はありますか?

1
複数のモニターでUnityをレンダリングする
現時点では、2つのモニターで実行できるように統一しようとしています。私はいくつかの調査を行いましたが、これは厳密に言えば可能であることを知っています。両方のモニター間で統一してレンダリングするために、基本的にはウィンドウサイズをフラフにする必要がある回避策があります。 私がやったことは、次の画像の3840 x 1080に示すように、両方のモニターの幅を取り込む新しいカスタム画面解像度を作成することです。 ただし、Unityゲームexeを実行しようとすると、そのサイズは利用できません。私が得るすべては以下です: 私のカスタムサイズは一番下にあるはずですが、そうではありません。exeを介してゲームを実行する際に、カスタム画面サイズを統合するために、私が行っていない、または見逃しているものはありますか? 奇妙なことに、ユニティエディター内で、カスタム画面サイズが取得され、ゲームウィンドウでそれを設定できます。 ファイルメニューからゲームをビルドして実行するときに、忘れてしまったことはありますか?誰かがこれまでにこの問題を克服したことがありますか?
11 unity  rendering 

5
ゲームのソース管理リポジトリからどのファイルタイプを除外する必要がありますか?
友人とUnityを使用して個人プロジェクトに取り組み始め、独自のソース管理システムをセットアップしました。 多くの種類のファイル、つまりビルド時にローカルで生成されるファイル(Visual Studioファイルなど)と、ソース管理に追加してはならない特定のマシンに固有のファイルがあることを知っていますが、私はこれらのファイルタイプが何であるか正確にわかりません。 .metaファイルなど、含める必要がある生成ファイルを除外したくありません。 特にUnityプロジェクトでは、バージョン管理に追加してはならない一般的なファイルタイプのすべて、または少なくともすべてを誰かがリストできるでしょうか?

6
ゲームの状態管理(ゲーム、メニュー、タイトル画面など)
基本的に、これまでに作成したすべてのゲームで、「current_state」のような変数が常にあります。これには、「game」、「titlescreen」、「gameoverscreen」などがあります。 そして、私のUpdate関数には、巨大なものがあります: if current_state == "game" game stuf ... else if current_state == "titlescreen" ... しかし、私はこれが専門的できれいな状態の扱い方だとは思いません。これをより良い方法で行うためのアイデアはありますか?それともこれが標準的な方法ですか?

1
ゲームアップルのシミュレーション-機能しない[終了]
ここで何が質問されているのかを理解することは困難です。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 ニュートン物理学でゲームを作ろうとしています。 これの残りを読む前に、これが私の主な質問です。私は答えを見つけようとしています: コードを実行しようとすると、ウィンドウにポップアップエラーが表示され続けます。どのライブラリまたはdllが欠落していますか? リンゴ、オレンジ、鉛筆を持っています。ほとんどのドキュメントを弾丸物理エンジンで読みましたが、リンゴを紙のように振る舞わせることができません(2D風)。Box2d物理エンジンなどは、私が望んでいるものではありません。私は、現実の世界では箱は好きではありません。サイバー世界ではもちろんです。 りんごを地面に浮かせて、紙のように前後に揺らしたい。このサイトは、コードに統合したいくつかの有用な情報を提供しました:htp://www.3dbuzz.com/vbforum/showthread.php?50854-Please-HELP !! -Simulating-paper-floating-to-ground 他の種類のオブジェクトと同じようにオブジェクトを動作させるゲームのアイデアはありますが、ゲームのシミュレーションが機能しません。 数え切れないほど多くの種類のリンゴを試してみましたが、どれも近くにはありません。同様のことを試している他の人を検索してみましたが(http://lmgtfy.com/?q=simluating+game+apples+in+real+lifeなどのグーグルを使用して)、リンゴは返されません! したがって、私はここで新しい領域に入るつもりだと思います(心配しないで、私は自分のテクニックをオープンソースにします)。それが、私にとってうまくいかない理由です。 さまざまな種類のリンゴをプログラミングしてみましたが、サイバーアップルが必要ですか?これらのいずれかをどこで入手できるかわかりません。たとえば、http://cyberapples.com/このサイトは今のところダウンしています-それはcgiのゴミ箱か何かについて話しているだけです。これについて何かヒントはありますか? これは、ゲームをシミュレートするリンゴを扱う私のコードの一部です。 ///... /* setup other objects in the room and other stuff */ ... // see http://www.orangepippin.com/apples/arlet-swiss-gourmet // for more arlet apple details paper_2d_behaving_apple = new ArletApple[); / setup the arlet apple's general characteristics paper_2d_behaving_apple.species = …
11 c++ 

1
GLSLの特別な相対性シェーダー
特別な相対性理論のローレンツ変換を理解するのに役立つGLSLシェーダーを実装しようとしています。 2つの軸に整列した慣性オブザーバーOとを考えてみましょう O'。オブザーバーO'は、O速度を伴ったオブザーバーに対して動いていv=(v_x,0,0)ます。 O'座標で説明すると、イベントP' = (x',y',z',ct')は座標を変換します(x,y,z,ct)= L (x',y',z',ct') ここで、Lはローレンツ変換と呼ばれる4x4行列であり、イベントP 'の座標を座標で書き込むのに役立ちますO。 (詳細はhttp://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-directionをご覧ください) すべての頂点に速度を指定してローレンツ変換を適用する最初の予備的な頂点シェーダーを書き留めましたが、変換を正しく機能させることができません。 vec3 beta= vec3(0.5,0.0,0.0); float b2 = (beta.x*beta.x + beta.y*beta.y + beta.z*beta.z )+1E-12; float g=1.0/(sqrt(abs(1.0-b2))+1E-12); // Lorentz factor (boost) float q=(g-1.0)/b2; //http://en.wikipedia.org/wiki/Lorentz_transformation#Matrix_forms vec3 tmpVertex = (gl_ModelViewMatrix*gl_Vertex).xyz; float w = gl_Vertex.w; mat4 lorentzTransformation = mat4( 1.0+beta.x*beta.x*q , beta.x*beta.y*q , beta.x*beta.z*q …

3
粒子で圧力をシミュレートする方法は?
私が構築しているUnityゲームで球形の粒子のコレクションを使用して圧力をシミュレートしようとしています。問題に関するいくつかのメモ: 目標は、常に変化する2Dスペース/ボイドを小さな摩擦のない球で埋めることです。ゲームは、このスペースに押し込まれるオブジェクトの増加する圧力をシミュレートしようとしています。 レベル自体は常に左から右にスクロールします。つまり、スペースの寸法がユーザーによって変更されない場合、自動的に小さくなります(スペースの左端の部分が画面外にスクロールし続ける)。 これらの問題に取り組むために私が取ることができるアプローチは何ですか? 塗りつぶすスペースがある場合にそれを検出し、そのスペースに球を追加するタイミングを知る。 縮小するときにスペースから球を削除します。 より多くのスペースが作成されたときに球が「外側に爆発する」ように球への圧力をシミュレートする戦略。 この画像が示すように、私が考えている現在のアプローチは、画面の外にあり、画面と一緒に動く、絶えず動く壁を使用しています。 。 この動く壁は、球を空間に押し込み、閉じ込めます。新しい球を追加する場合、私は(1)空きスペースを検出すると球を複製する、または(2)スペースの左側(壁がある場所)にスポーンする-残りの球をスペースを埋めます。これは実際には圧力を作成/シミュレートしない可能性が高いため、アイデア#1の問題を予測します。アイデア#2はより有望に思われますが、これらの新しい球のパーティクルがスポーンする場所を提供する方法(およびスペースがない場合にスポーンすることの影響)の問題を提起します。 あなたの知恵を前もってどうもありがとう!
11 2d  unity  physics 

2
接線空間法線マップが完全に青ではないのはなぜですか?
法線マップが青くならないのはなぜですか?法線のZ成分は青で表されるので、法線マップは主に青色である必要があると思います。法線はZ方向のサーフェスの外側を指しているため、Z成分が支配的であるため、主な色として青が表示されます。 定義により、接線空間は表面に垂直です。どの時点でも、法線は常にZ(青の方向)を指し、X(赤の方向)またはY(緑の方向)はありません。したがって、法線マップ(「法線マップ」であるため)は、法線の色が青(R = x = 0、G = y = 0、B = z = 1)であり、中間に陰影がない必要があります。 しかし、法線マップはそうではなく、陰影のグラデーションがあります。これはなぜですか?

2
デカールの実装
デカールに関する情報を見つけるのに問題があったので、この質問が他の人の役に立つかもしれません。この実装は、フォワードレンダラー用です。 デカールの実装が正しいかどうか誰かが確認できますか? 共通空間での投影ボリュームを定義する任意の次元の立方体を定義します。定義されたキューブとの三角形の交差をチェックして、投影が影響する三角形を受け取ります。 これらの三角形をクリップして保存します。 次に、マトリックストリックを使用して、投影するテクスチャを参照する保存された三角形のUV座標を計算します。 これを行うには、共通空間での立方体の高さ、幅、奥行きを表すベクトルを取り、左下隅が原点になるようにします。 これをi、j、kの単位ベクトルとして行列に入れ、立方体の移動を設定してから、この行列を逆にします。 保存した三角形の頂点にこの行列を掛けます。これにより、UV座標として使用する0から1のサイズの立方体内の座標を取得できます。 このようにして、投影している元の三角形があり、それらのUV座標があります(UV座標は、投影しているテクスチャを参照しています)。 次に、保存した三角形をシーンに再レンダリングすると、投影された画像で投影領域が上書きされます。 今、私が答えを見つけることができなかった質問。最後の点は正しいですか?私はソフトウェアクリッピングを行ったことがありませんが、精度に制限があるため、投影されたテクスチャに対してzファイティングが発生する可能性があるため、エラーが発生しやすいようです。また、UV座標を正しく取得する方法はありますか?

6
2,000万タイルのマップでゲームのメモリが不足します。どうすれば回避できますか?
余分な巨大なマップをロードしているときに、ロードメソッドがメモリ例外をスローし、マップタイルの新しいインスタンスが作成されます。少なくともサーバーアプリ(および可能であればクライアント)でマップ全体を処理してもらいたいのですが。この問題を解決するにはどうすればよいですか? UPD:ここでの問題は、使用する空きメモリがまだあるときにゲームがクラッシュしないようにする方法です。チャンクでマップを分割することに関しては、それは良いアプローチですが、私の場合には望みのものではありません。 UPD2:最初に私は行って、タイルクラスのすべての新しいインスタンスにテクスチャを割り当てました。今では、約4分の1のスペースで済みます。皆さんのおかげで、今はまだ塊に分割することを考えずに巨大なマップを実行できます。 UPD3:コードを書き直して、タイルプロパティの配列がより速く機能するか、メモリ消費が少ないかどうかを確認した後(オブジェクトプロパティとしての各タイルのプロパティよりも)、それを試すのに多くの時間がかかっただけでなく、パフォーマンスは向上せず、ゲームのデバッグが非常に困難になりました。

3
オブジェクトを別のオブジェクトの円周に沿って移動するにはどうすればよいですか?
私は数学が足りないので痛いですが、あなたにとってはこれは簡単なことでしょう。単純な円形のパス上で、オブジェクトを他のオブジェクトの年齢や周囲に沿って移動したい。現在のところ、私のゲームアルゴリズムは、スプライトを障害物の端に移動および配置する方法を知っており、さまざまな条件に応じて次のポイントが移動するのを待ちます。 したがって、ここでの数学的な問題は、中心(cX、cY)、オブジェクトの位置(oX、oY)、および移動に必要な距離(d)がわかっているときに、(aX、aY)および(bX、bY)の位置を取得する方法です。
11 java  mathematics 

1
JavaScriptで高速逆平方根を実装しますか?
Quake IIIのFast Inverse Square Rootは、浮動小数点トリックを使用しているようです。私が理解しているように、浮動小数点表現はいくつかの異なる実装を持つことができます。 では、Javascriptで高速逆平方根を実装することは可能ですか? 同じ結果が返されますか? float Q_rsqrt(float number) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; i = 0x5f3759df - ( i >> 1 ); y = * ( …
11 javascript 

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