ゲーム開発

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

4
Box2Dで近接武器を作成する(libGDX)
キーが押されたときにスイングできる近接武器の実装方法に苦労しています。 2つの異なる攻撃(スタブとスイング)を想像しています 2つのフィクスチャー(キャラクター+武器)、2つの異なるボディ、2つの異なるボディ+回転ジョイントを作成しようとしましたが、想像したとおりに動作するようにコーディングすることはできません。 刺す: したがって、ボタンを押すと、ボディ/フィクスチャー(センサー)が約1秒間表示されてから消えます(または、ボディ/フィクスチャーは常にヒーロー上にあり、押すと頂点を中心に90度回転するだけで、その後、回転して通常に戻します) スイング: 同じことですが、今度は武器が上から始まり、下にスイングします。武器もセンサーになります。 私が試したこと: 2つの動的ボディを作成しました。 武器はヒーローに従う必要があるので、私は回転ジョイントを使用してそれらをまとめました。キーを押すと、武器の角速度を数値に設定します。ただし、キーを離しても武器は回転し続けます。ifチェックを実装してみました(角度が___より大きい場合は、角速度をゼロに設定します)。ただし、これは、もう一度キーを押すと、武器が回転を停止することを意味します。
10 java  libgdx  box2d 

2
3人称カメラをターゲットに向けて回転させる
私はプレーヤーを直接見ない3人称カメラを持っていますが、彼の前のどこかにあります。 ユーザーが撮影モードに入ると、カメラがプレイヤーを振り向いてターゲットに向かいます。 上の画像。「O」はプレーヤー(原点)、「L」はルックアット、「C」はカメラの位置、「T」はターゲットです。ルックアットラインC-> Lを回転させて、原点( "O")を中心にT(C '-> L'-> T ')を通過するようにします。 基本的には、画像に赤で表示した角度アルファを見つける必要があります。 私はカメラの位置をそのような構造に保存します: struct CameraTarget { Quaternion absoluteRotation; Vec3 absolutePosition; Vec3 cameraOffset; Vec3 lookatOffset; float FOV; } だから私が探している角度を見つけることができれば私は次のようなことをすることができます: cam->absoluteRotation = cam->absoluteRotation * alpha; プレイヤーに常にターゲットを見させる。 LookatがOriginを通り過ぎていた場合、私は簡単にできます Vec3 origDir = cam->lookAtOffset - cam->absolutePosition; origDir.normalize(); Vec3 newDir = cam->target - cam->absolutePosition; newDir.normalize(); Quaternion q(origDir, newDir); …

1
ゲームループとopenGLの間のマルチスレッドを利用する
openGLレンダラーに基づくゲームのコンテキストで話す: 2つのスレッドがあるとしましょう: ゲーム内オブジェクトのゲームロジックや物理などを更新します ゲームオブジェクトのデータ(スレッド1が更新し続ける)に基づいて、各ゲームオブジェクトのopenGL描画呼び出しを行います。 ゲームの現在の状態で各ゲームオブジェクトの2つのコピーがない限り、スレッド2が描画呼び出しを行っている間、スレッド1を一時停止する必要があります。そうでない場合、ゲームオブジェクトはそのオブジェクトの描画呼び出しの途中で更新されます。望ましくない! ただし、スレッド1を停止してスレッド2から安全に描画呼び出しを行うと、マルチスレッド/同時実行の目的全体が失われます。 マルチコアアーキテクチャを活用してパフォーマンスを向上させるために、数百または数千または同期オブジェクト/フェンスを使用する以外に、これに対するより良いアプローチはありますか? マルチスレッドを使用して、現在のゲームの状態にまだ含まれていないオブジェクトのテクスチャをロードしてシェーダーをコンパイルできることはわかっていますが、アクティブ/可視オブジェクトに対して、描画と更新の競合を引き起こさずにそれを行うにはどうすればよいですか? ゲームオブジェクトごとに個別の同期ロックを使用するとどうなりますか?このように、すべてのスレッドは、更新/描画サイクル全体ではなく、1つのオブジェクト(理想的なケース)でのみブロックします!しかし、各オブジェクトのロックを取得するのにどのくらいのコストがかかりますか(ゲームには1000のオブジェクトがある場合があります)?

4
ラインレンダラーラインをフラットに保つ方法は?
Line Rendererラインに頂点を追加すると、ラインがねじれて滑らかなラインでなくなることに気付きました。 .GIFこちら:http : //i.imgur.com/hRAhCXM.gif すべての線が同じzレベルにあります。材料を削除しても、線はまだねじれているようです。 なぜこれが行われるのか、またはどのように解決するのか、提案がありますか?
10 c#  unity  2d  lines 

3
名前の生成
私はゲームを作っている(または少なくとも計画している)ために、NPCの「ボス」の名前を自動的に生成する方法が必要です(詳細な説明とここでは関係ありません)。このようなものは私が何を意味するかの良い例です。 国籍、おそらく最初/最後のペアで名前のデータベースを構築し、それらをランダムに割り当て、名前リストを無視して、Homer Simpsonのようなものを取得したり、訴えられたりしないようにすることができると考えています。 それに関する問題は、それが機能するために名前の大規模なデータベースを構築する必要があるということです。だれかがすでに無料で利用できる名前のリストを持っているのでなければ、それは永遠にかかるかお金がかかるでしょう。 母音と子音のランダムなペアを作成し、いくつかを反転させ、それらを一緒に追加するという別のアイデアがありますが、次のような名前を生成する簡単なプログラム: Seermeecpa シメ Ofmiahwumafi ゴジディ 有効な (コードに興味がある人は、ここで確認できます) これらは...一口のようなものです。まあ、「ゴジディ」を除いて-それは働くことができました。それでも、成功率は明らかにあまり良くありません。 名前の見栄えを良くするために何かできることはありますか(以下を参照)、またはそのリストを作成する必要がありますか?名前がまともであるかどうかを人間が判断する方法を、少なくともある程度正確に、どうにかして模倣できますか?大きなリストでのルックアップよりも、このようなものを使用したいと思います。 「ナイス」とは、文字のランダムな組み合わせ(つまり、公平である)ではなく、実際の名前のように聞こえるものです。私のようなステレオタイプのばかげた、単一言語のアメリカ人があまり問題なくそれらを言うことができる限り、彼らはどんな文化(または彼らがそうであるかのように聞こえる)、現実または想像上の何かからのものでありえます。 追加の説明が必要な場合は、先に進んで質問してください。ここに何を入れればいいのかよくわかりません。 補遺:私の知る限りでは、この質問に完全に当てはまるタグは実際にはありません。ここに長く滞在している人が推薦できる人がいれば、それは素晴らしいことです。

2
クライアント側予測でリアルタイムのランダムな動きを処理する方法
クライアントとサーバーで同じ「物理」ループを実行するリアルタイムマルチプレーヤーゲームを構築しています。私は、本質的なランダムな動きであるステアリング動作「ワンダー」を使用しています。ワンダーアルゴリズムを実行すると、クライアントとサーバーは異なる乱数を生成します。 自然にランダムに見える動きをどのように保つことができるのか疑問に思っていますが、クライアントとサーバーが同じ結論になることを保証する定数を使用します。

1
同じビットサイズのレンダーターゲットが重要なのはなぜですか?
現在、遅延シェーディングに必要なGBufferのタイプを考えているので、最も一般的なものとそのフォーマットについてオンラインでドキュメント化しようとしました。 私が見たほとんどのGBufferは、各レンダーターゲットに同じビットサイズを使用しており、多くの場合、未使用のチャネルにもつながります。しかし、私のGBufferの最初の推測として、紙の上では、2つの24ビットターゲットと2つの32ターゲット、または3つの24と1 32が必要です。 各添付ファイルを同じ「サイズ」にするとより適切に位置合わせできることを理解していますが、実際には、チャネルを無駄にして(または将来の使用のために予約して)すべてのRTを同じサイズにするか、必要なものだけを使用する方が良いですか?前者の場合、なぜそのような利点があるのか​​、とにかく24ビットのものは32にパディングされるのでしょうか?

2
Table.drawDebugはlibGDXでは非推奨であるため、代わりに何を使用する必要がありますか?
私は「Learning LibGDX Game Development」の本に従ってシンプルなゲームを作成しています。私は、ステージを作成してデバッグ境界線でレンダリングするメニュー作成セクションにいます。 本は使用するように言っていますTable.drawDebug(stage)が、この静的メソッドはフレームワークTableクラスから完全に削除されたようです。 インポートしていcom.badlogic.gdx.scenes.scene2d.ui.Tableます。以下は私のコードです: @Override public void render(float deltaTime) { Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (debugEnabled) { debugRebuildStage -= deltaTime; if (debugRebuildStage <= 0) { debugRebuildStage = DEBUG_REBUILD_INTERVAL; rebuildStage(); } } stage.act(deltaTime); stage.draw(); Table.drawDebug(stage); } 最後の行にTable.drawDebug(stage);はコンパイルエラーがあります"The method drawDebug(ShapeRenderer) in the type Table is not applicable for the …

1
OpenGLでは、「ゼロ状態」レンダリングとは何ですか?
最近の就職の面接で、私は自分の近代的なOpenGLと頂点バッファーオブジェクトを使用したレンダリングについて学びました。なぜなら、私の大学では、即時モードレンダリングを使用する固定関数パイプラインしか教えていないためです。インタビュアーは、VBOが「ゼロステートレンダリング」と呼ばれるものに効果的に置き換えられたと私に簡単に割り込んだので、続けます。 すぐに別のテーマに移り、面接官は忙しいスケジュールのために最後に時間切れになったので、私は後でそれが何を意味するかについて尋ねるのを忘れていました。 その後、オンラインで「OpenGLゼロ状態」と「ゼロ状態レンダリング」を検索しましたが、関連すると思われる結果は得られませんでした。ほとんどがOpenGL状態に関するものだけです。 問題の組織は非常に研究に基づいているため、現在ほとんどサポートされていない拡張機能である可能性がありますか、それとも最先端の性質のために使用される用語が異なる可能性がありますか?

3
Windows(理想的にはUnity)でDualShock 4モーションセンサーにアクセスする
Windows 7でUnityのモーションコントローラーとしてDualShock 4のIMUを使用しようとしています。 これまでのところ、私は試しました: DS4Windows(1.5.11):モーションセンサーデータを読み取りますが、左右のスティックにマップしない限り、それらを軸としてUnityに公開しません。スティックを使用できなくなったため、これでは不十分です。6チャネルのデータのうち4チャネルしかフィットできず、通過する値は狭い範囲にクリップされます。 Motioninjoy(0.7.1001):DS4をコントローラーとして検出しないようです(最新のドキュメントはDS3以前のみを参照しています) GlovePIE(0.43):DualShock 3をLibUSB-Win32(ロングショット)で使用するための手順に従っても、SixAxisプロパティがすべて空白になります。 これまで、GlovePIEなどの外部プログラムを使用してWiiリモートモーションセンサーデータをキャプチャし、OSCメッセージを介してUnityに渡していました。そのため、Unityにコントローラーのセンサーを読み取れない場合は、このようなアプローチを受け入れることができます。入力システムを介して直接。 誰もがこれで運が良かったですか?

2
複数のオブジェクトをレンダリングするには、いくつのOpenGLプログラムを使用する必要がありますか?
私のシーンには複数のオブジェクトが含まれています。(3つの立方体、1つの円柱、8つの球体としましょう。)それぞれに頂点シェーダーを作成する必要があると仮定します。いくつのプログラムが必要ですか? 代替案: オブジェクトごとに1つのプログラム すべてのキューブ用のプログラムと、すべての球用のプログラム(同じシェーダーを使用する場合) すべてのための1つの大きなプログラム 正しいアプローチは何ですか?


2
Lシステムを使用して手続き的に都市を生成する
私は現在、手続き的に生成されたコンテンツに重点を置いたアプリを作成しています。これまでのところ、シンプレックスノイズを使用して、地形の手順による生成とマップの形状の実装に成功しています。私はそれがどのように見えるかに本当に満足しています。今、私は都市にも同じことをしようとしています。通りと建物の2Dレイアウトを生成するだけです。私はそれを調査しました、そして、ほとんどの人がL-Systemsを使うことを提案するようです。しかし、私はそれらの周りに頭を包むようには見えません。コンセプトはわかりますが、コードへの実装はわかりません。誰かが手続き的に生成された都市のためのLシステムのコード例、または都市を処理する他の方法に関する提案を持っていますか?

2
オブジェクトの動きを滑らかにするために、実際に補間はどのように機能しますか?
過去8か月間、同じような質問をいくつかしましたが、あまり喜びがなかったので、質問をより一般的なものにします。 OpenGL ES 2.0のAndroidゲームを持っています。その中に私は次のゲームループを持っています: 私のループは固定時間ステップの原理(dt = 1 / ticksPerSecond)で動作します loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ updateLogic(dt); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; } render(); 私の統合は次のように機能します: sprite.posX+=sprite.xVel*dt; sprite.posXDrawAt=sprite.posX*width; 今、すべてが私が望むようにかなり機能します。オブジェクトを特定の距離(画面の幅など)で2.5秒で移動するように指定できます。また、ゲームループで許可するフレームスキップのため、ほぼすべてのデバイスでこれを実行でき、常に2.5秒かかります。 問題 ただし、問題は、レンダリングフレームがスキップされると、グラフィックが途切れるということです。それは非常に迷惑です。フレームをスキップする機能を削除すると、すべてが好きなようにスムーズになりますが、異なるデバイスでは異なる速度で実行されます。したがって、それはオプションではありません。 フレームがスキップする理由はまだわかりませんが、これはパフォーマンスの低下とは関係がないことを指摘したいと思います。コードを1つの小さなスプライトに戻し、ロジックはありません(必要なロジックは別として)スプライトを移動します)と私はまだスキップされたフレームを取得します。そして、これはGoogle Nexus 10タブレット上にあります(そして上記のように、デバイス間で速度を一定に保つためにフレームスキップが必要です)。 だから、私が持っている他の唯一のオプションは、内挿(または外挿)を使用することです。そこにあるすべての記事を読みましたが、それがどのように機能するかを理解するのに実際に役立ったものはなく、試行したすべての実装は失敗しました。 1つの方法を使用して物事をスムーズに移動させることができましたが、衝突をめちゃくちゃにしたため、実行できませんでした。レンダリングはレンダリング時にレンダリングメソッドに渡され、その中で処理が行われるため、同様の方法で同じ問題を予測できます。したがって、衝突が位置を修正した場合(キャラクターが壁のすぐ隣に立っている)、レンダラーはその位置を変更して壁に描画できます。 だから私は本当に混乱しています。レンダリングメソッド内からオブジェクトの位置を変更するべきではないと人々は言っていますが、オンラインのすべての例でこれが示されています。 私は正しい方向へのプッシュを求めています。これらを何度も読んだので、人気のゲームループの記事(deWitters、Fix your timestepなど)にリンクしないでください。私はしていない私のためのコードを記述するために誰を尋ねます。補間が実際にいくつかの例でどのように機能するかを簡単な言葉で説明してください。次に、アイデアをコードに統合し、必要に応じてより具体的な質問をします。(これは多くの人が悩んでいる問題だと思います)。 編集する いくつかの追加情報-ゲームループで使用される変数。 private long nextGameTick …

2
フォントサイズをlibgdxの画面解像度に一致させる問題
ゲームのテキストを同じサイズで別の画面に表示するのに問題があり、簡単なテストを行いました。 このテストは、画面にテキストフィッティングを表示することで構成されています。画面やDPIから独立して、テキストのサイズが同じである必要があります。 私はこれとこの答えを見つけましたが、私の問題は解決するはずですが、解決しません。デスクトップではサイズは大丈夫ですが、私の電話では大きすぎます。 これは私のNexus 4での結果です(768x1280、2.0密度) そして、これは私のMacBookの結果です:(480x800、0.6875密度) Open Sans Condensedを使用しています(Googleフォントへのリンク) ご覧のとおり、デスクトップは見栄えが良いですが、電話ではとても大きいです。 ここに私のテストのコード: public class TextTest extends ApplicationAdapter { private static final String TAG = TextTest.class.getName(); private static final String TEXT = "Tap the screen to start"; private OrthographicCamera camera; private Viewport viewport; private SpriteBatch batch; private BitmapFont font; @Override public void …

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