ゲーム開発

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

6
リソースがほぼ枯渇している場合、どのように工場間でリソースを公平に分配しますか?
私のゲームの主なリソースはmassで、時間とともに変化する浮動小数点数として保存されます。リソースノードは質量を増やし、工場はそれを排出します。たとえば、1秒あたり5質量のリソースノードがある場合、5 * deltaT各ゲームステップで質量が増加します。質量は最も近い整数に丸められて表示され、ゲイン/損失インジケータは10分の1単位で表示されます。 ゼロヒットの質量をどのように処理すればよいですか?これにより、複数の工場が一度に構築しようとする場合に競合状態が発生します。最初にキュー内にある工場、またはより多くのリソースが入ってくるとより少ないリソースを消費する工場が優先されるため、他の工場よりも速く構築されます。 どうすれば対処できますか?ステップを完全にスキップする必要がありますか?

1
画面外のオブジェクトを指す画面の端に矢印を描画するにはどうすればよいですか?
このトピックで説明されていることを実行したいと考えています。 http://www.allegro.cc/forums/print-thread/283220 ここで述べたさまざまな方法を試しました。 まず、Carrus85で説明されている方法を使用しようとしました。 2つの三角形の斜辺の比を取るだけです(もう一方の三角形を使用しても構いません。計算する距離としてポイント1とポイント2をお勧めします)。これにより、大きな三角形からコーナーの三角形のアスペクト比のパーセンテージが得られます。次に、deltaxにその値を掛けてx座標のオフセットを取得し、deltayにその値を掛けてy座標のオフセットを取得します。 しかし、オブジェクトが画面の端からどれだけ離れているかを計算する方法を見つけることができませんでした。 次に、23yrold3yroldによって提案されたレイキャスティング(これまで行ったことのない)を使用してみました。 画面の中心からオフスクリーンオブジェクトに光線を発射します。光線が長方形のどこで交差するかを計算します。あなたの座標があります。 最初に、2つのポイントのx位置とy位置の差によって形成される三角形の斜辺を計算しました。これを使用して、その線に沿って単位ベクトルを作成しました。x座標またはy座標のいずれかが画面外になるまで、そのベクトルをループしました。2つの現在のxとyの値は、矢印のxとyを形成します。 これが私のレイキャスティングメソッドのコードです(C ++およびAllegro 5で記述されています) void renderArrows(Object* i) { float x1 = i->getX() + (i->getWidth() / 2); float y1 = i->getY() + (i->getHeight() / 2); float x2 = screenCentreX; float y2 = ScreenCentreY; float dx = x2 - x1; float dy = y2 …

1
ネットワーク上でデータ構造の同期を維持する方法は?
環境 私が取り組んでいるゲーム(一種のポイントアンドクリックグラフィックアドベンチャー)では、ゲームの世界で起こるほとんどすべてのことが、次のような構造のアクションマネージャーによって制御されます。 たとえば、オブジェクトを調べた結果、キャラクターに挨拶をさせ、少し歩き、座った場合、次のコードを生成します。 var actionGroup = actionManager.CreateGroup(); actionGroup.Add(new TalkAction("Guybrush", "Hello there!"); actionGroup.Add(new WalkAction("Guybrush", new Vector2(300, 300)); actionGroup.Add(new SetAnimationAction("Guybrush", "Sit")); これにより、新しいアクショングループ(上の画像の行全体)が作成され、マネージャーに追加されます。すべてのグループは並行して実行されますが、各グループ内のアクションはチェーン化され、2番目のグループは最初のグループが終了した後にのみ開始されます。グループ内の最後のアクションが終了すると、グループは破棄されます。 問題 ここで、この情報をネットワーク全体に複製する必要があります。そのため、マルチプレイヤーセッションでは、すべてのプレイヤーが同じものを見ることができます。個々のアクションをシリアル化することは問題ではありません。しかし、私はネットワーキングに関してはまったくの初心者であり、いくつか質問があります。この説明の単純化のために、アクションマネージャーコンポーネントを次のように抽象化できると思います。 var actionManager = new List<List<string>>(); 上記のデータ構造の内容をすべてのプレーヤー間で同期させるにはどうすればよいですか? コアの質問に加えて、私はそれに関連するいくつかの他の懸念も持っています(つまり、上記と同じ問題のすべての可能な影響): 私は、との1(サーバーとクライアントの両方として動作する選手の一人で)サーバ/クライアントアーキテクチャを使用している場合は、クライアント生み出したアクションのグループを、彼はマネージャーに直接追加、または唯一のリクエストを送信する必要がありますサーバーに、順番にすべてのクライアントにそのグループを追加するように指示しますか? パケット損失などはどうですか?ゲームは決定論的ですが、クライアントで実行されるアクションのシーケンスに矛盾があると、世界の一貫性のない状態につながる可能性があると考えています。そのような問題からどのように保護しますか? 一度に追加するアクションが多すぎると、接続に問題が発生しませんか?それを軽減する方法はありますか?

6
Ball Physics:ボールが止まったときに最終的な跳ね返りを滑らかにする
私は小さなバウンドするボールゲームで別の問題に直面しました。 ボールが止まりそうな最後の瞬間を除いて、ボールはうまく跳ね返ります。ボールの動きは主要部分では滑らかですが、最後に向かって、画面の下部に落ち着くとしばらくボールが動きます。 なぜこれが起こっているのかは理解できますが、それをスムーズにすることはできません。 提供できるアドバイスに感謝します。 私の更新コードは次のとおりです。 public void Update() { // Apply gravity if we're not already on the ground if(Position.Y < GraphicsViewport.Height - Texture.Height) { Velocity += Physics.Gravity.Force; } Velocity *= Physics.Air.Resistance; Position += Velocity; if (Position.X < 0 || Position.X > GraphicsViewport.Width - Texture.Width) { // We've hit a …
12 xna  c#  physics 

4
SATで連絡先を見つける
分離軸定理(SAT)により、最小平行移動ベクトル、つまり2つの衝突するオブジェクトを分離できる最短ベクトルを簡単に決定できます。ただし、必要なのは、貫通オブジェクトが移動しているベクトル(つまり、接触点)に沿ってオブジェクトを分離するベクトルです。 明確にするために絵を描きました。前から後の位置に移動する1つのボックスがあります。後の位置では、灰色のポリゴンと交差します。SATは、赤いベクトルであるMTVを簡単に返すことができます。青いベクトルを計算しようとしています。 私の現在のソリューションは、青いベクトルの長さが特定のしきい値に達するまで、前と後の位置の間でバイナリ検索を実行します。それは機能しますが、形状間の衝突をループごとに再計算する必要があるため、非常に高価な計算です。 接触点ベクトルを見つけるためのより簡単なおよび/またはより効率的な方法はありますか?

4
OpenGLでマルチパスシェーダーはどのように機能しますか?
Direct3Dでは、プログラム内でパスを文字通り定義できるため、マルチパスシェーダーの使用は簡単です。OpenGLでは、シェーダープログラムに必要な数の頂点シェーダー、ジオメトリシェーダー、およびフラグメントシェーダーを与えることができるため、もう少し複雑に思えます。 マルチパスシェーダーの一般的な例は、トゥーンシェーダーです。1つのパスは実際のセルシェーディング効果を実行し、もう1つのパスはアウトラインを作成します。2つの頂点シェーダー「cel.vert」と「outline.vert」、および2つのフラグメントシェーダー「cel.frag」と「outline.frag」(HLSLで行う方法と同様)がある場合、どうすればよいですかそれらを組み合わせてフルトゥーンシェーダーを作成しますか? マルチパスGLSLシェーダーの背後にある理論を知りたいだけなので、これにジオメトリシェーダーを使用できると言ってほしくありません;)
12 opengl  shaders  glsl 

2
ベクトルを使用して現実的な車の動きを作成しようとしています
私はこれを行う方法をゴーグルし、これを見つけましたhttp://www.helixsoft.nl/articles/circle/sincos.htm私はそれをやってみましたが、示された機能のほとんどが機能しませんでした存在しなかったからです cos関数とsin関数を見てきましたが、それらを使用する方法、またはベクトルを使用して車の動きを正しく機能させる方法を理解していません。申し訳ありませんが、コードがありません。 どんな助けも大歓迎です。 編集: ゲームにはTLエンジンを使用しなければならないという制限があり、物理エンジンを追加することはできません。C ++でプログラムする必要があります。ここに、私が提供したリンクで行われたことを追跡しようとすることから得たもののサンプルがあります。 if(myEngine->KeyHeld(Key_W)) { length += carSpeedIncrement; } if(myEngine->KeyHeld(Key_S)) { length -= carSpeedIncrement; } if(myEngine->KeyHeld(Key_A)) { angle -= carSpeedIncrement; } if(myEngine->KeyHeld(Key_D)) { angle += carSpeedIncrement; } carVolocityX = cos(angle); carVolocityZ = cos(angle); car->MoveX(carVolocityX * frameTime); car->MoveZ(carVolocityZ * frameTime);

2
オープンソースゲームで本物のプレイヤー名とチームエンブレムを使用することに関する法的問題
スポーツ管理シミュレーションゲームを書いています。ほとんどのスポーツ管理ゲームと同様に、統計を多用しています。本物の選手、チーム、リーグ名を使いたいです。 i)本名を使用する必要がある場合、合法的な戦いに入るリスクはありますか? ii)チームの色やエンブレムなどはどうですか? 更新し 、すべての入力のための多くの感謝を!
12 legal 

4
アイソメビューフラッシュゲームで描画順序を決定するにはどうすればよいですか?
これは、等角投影ビューのフラッシュゲーム用です。オブジェクトを並べ替える方法を知る必要があるので、描画時にzバッファをチェックする必要はありません。これは簡単に思えるかもしれませんが、別の制限があります。シーンには10,000個以上のオブジェクトを含めることができるため、アルゴリズムはO(n ^ 2)未満で実行する必要があります。すべてのオブジェクトは長方形のボックスであり、シーン内で3〜4個のオブジェクトが移動しています。これを行う最良の方法は何ですか? 更新 各タイルにはオブジェクトのみがあります(つまり、オブジェクトを互いに重ねることはできません)。オブジェクトのマップとオブジェクトの両方にアクセスし、それぞれの位置を持っています。 更新2 これらの図を参照してください。 最初に最初に青いオブジェクトを描画し、次に緑、次に赤を描画します。一方、2番目では逆の順序で描画する必要があります。最初に赤、次に緑、最​​後に青のオブジェクトを描画する必要があります。ご覧のとおり、青と赤のオブジェクトの位置に違いはありません。両方ともカメラからの距離が異なります。しかし、緑色のボックスに対する相対的な位置のため、2つの画像間で描画順序を変更する必要があります。それがこの問題を混乱させるものです。 補足:すべてのオブジェクトは直角プリズムであるため、問題のニーズを満たすために少なくとも1つの描画順序があることを数学的に証明できます。

2
C ++の乱数
最近、私は、通常はメルセンヌツイスターである、ストックグッドランダムジェネレーターを含む現代言語に慣れました。C ++に戻った今、使用するものを決定する必要があります。 Mersenne Twisterの実装を検索しましたが、非常に多くの実装があることに気付きました。より広く使用されている実装がありますか?
12 c++  random 

4
オブジェクト指向OpenGL
私はしばらくの間OpenGLを使用しており、多数のチュートリアルを読みました。それらの多くがまだ固定パイプラインを使用しているという事実は別として、彼らは通常、すべての初期化、状態変更、および描画を1つのソースファイルにスローします。これは限られた範囲のチュートリアルには適していますが、完全なゲームにスケールアップする方法を見つけるのに苦労しています。 OpenGLの使用をファイル間でどのように分割しますか?概念的には、たとえば、純粋に画面に素材をレンダリングするレンダリングクラスを持つことの利点を見ることができますが、シェーダーやライトのようなものはどのように機能しますか?ライトやシェーダーなどのクラスを個別に用意する必要がありますか?

1
OpenALバッファーのバインドを解除して削除するにはどうすればよいですか?
OpenALを使用してサウンドを再生しています。私は、バッファIDを取得し、以前に割り当てたプールからソースに割り当てて再生する、ファイアアンドフォーゲットプレイ機能を実装しようとしています。ただし、オブジェクトの有効期間には問題があります。 OpenGLでは、削除関数は自動的にバインドを解除する(テクスチャなど)か、最終的にバインドされなくなったときに自動的に削除する(シェーダーなど)ため、通常、削除の管理は簡単です。ただし、alDeleteBuffers代わりにAL_INVALID_OPERATION、バッファがまだソースにバインドされている場合、単に失敗します。 OpenALバッファーの再生を終了し、自動的にバインドを解除して実際にそれらを許可する慣用的な方法はありますか?バッファ管理をソースプールにより深く関連付ける必要がありますか(たとえば、バッファを削除するには、割り当てられているすべてのソースもチェックする必要があります)。 同様に、バッファの再生が終了したときに、バッファをアンバインドする(削除はしない)慣用的な方法はありますか?無料のソースを探していたときに、バッファがまったく接続されているかどうかを確認するだけで、ソースの状態を確認する必要がなければいいのですが。 (私はC ++を使用していますが、Cのアプローチも問題ありません。GCd言語を想定し、ファイナライザを使用するアプローチはおそらく適用されません。)
12 openal 

2
C#で簡単なヘビゲームを作成する
C#でスネークゲームを作成することを考えていたので、頭の中でアイデアを実行し、いくつかの問題が発生しました。 ヘビの頭の後ろを通るブロックを正しい場所で追跡して出力するにはどうすればよいですか? ヘビが5つのブロックで構成されていて、ユーザーが円を描くようになった場合、ヘビの体を正しい場所に印刷するにはどうすればよいですか? また、ユーザーが何をしても、バックグラウンドで実行されるアクションを作成して、ヘビを前方に移動させるにはどうすればよいですか? コードにはどのような構造が必要ですか?(コード設計構造) 私がよく知っている唯一のフレームワークなので、これはコンソールアプリケーションでなければなりません。 それがどのように機能するかを本当に理解したいので、完成したコードを探していません。
12 c# 

1
2Dアートアセット(スプライトなど)はどのように機能しますか?
ゲームについてのアイデアがあり、XNA for Windows Phone 7を使用した2Dゲームの開発を計画しています。 今日は、キャラクターに見せたいコンセプトアートをフリーハンドで描くことから始めました。今、問題はそれらの概念を取り入れてデジタル形式にすることです。 最初に気づいたのは、ゲームアートのさまざまな部分が本当にわからないことです。私はスプライト、テクスチャ、アニメーションがあることを知っていますが、それはそれについてです。テクスチャは3Dオブジェクト上のスプライトだと思いますが、それが正しいかどうかはわかりませんか?ここに私が持っているゲームアートに関する一般的な質問があります。 2Dゲームでテクスチャを使用しますか? ゲームアートのさまざまな部分をどこに適用しますか?たとえば、スプライトとアニメーションを使用する場合。 スプライト、テクスチャアニメーション、その他のアートの違いは何ですか? スプライト、テクスチャ、アニメーションはゲームの唯一のアート要素ですか? ゲーム内のすべての2Dアートはスプライトと見なされますか?キャラクター、背景など スプライトシートとスプライトシートの各キャラクターをどのサイズにしますか? デジタル見込み客からアートを描くための教育に関する良い本やチュートリアルはありますか?私は「GIMP Bible」を入手することを考えていましたが、このようなほとんどの本はデジタル描画よりも写真編集を多く教えています。 私の目的は、コンセプトアート(背景とキャラクター)をGimpを使用してデジタル形式にし、ゲームアートのさまざまな部分について学習する方法を学ぶことです。 とにかく、助けてくれる人に感謝します。

4
ソーシャルゲームの経済と収益化におけるデュアル通貨と1つの通貨
プログラミングの質問ではなく、ゲーム開発に関連しています。 アプリ内購入が収益化に使用される、無料でプレイしたいiPhoneオンラインゲームを作成しています。重要なポイントは、これがゲームプレイを壊さないことを確認することです。私の優先事項は、ゲームプレイを最初に、収益化を次にすることです。 プレーヤーベースを収益化する一般的な方法の1つは、ゲーム内通貨を販売することですが、これには2つの方法があります。 1つの通貨:この通貨はゲーム内のあらゆるものを購入でき、通常のプレイで限られたレートで獲得できます。ただし、プレイヤーはこの通貨を直接購入して、通貨の取得をスピードアップすることができます。 デュアル通貨:通常のプレイで1つの通貨を獲得でき、通常のゲームを楽しむために必要な限られたアイテムを購入するために使用できます。2番目の通貨は「プレミアム」であり、実際のお金を使用して購入する必要があります。この2番目の通貨は、EXPゲインの増加などの追加機能を提供する「プレミアムアイテム」を購入するために使用できます。 どちらの方法でもゲームプレイが中断されることはなく、十分な時間と労力を費やせば、支払いを希望しないプレーヤーでもゲームのコンテンツ全体を楽しむことができます。 私の質問は、あなたが別のものを選ぶ理由はありますか?各選択肢を実装する際に注意すべき長所と短所は何ですか? ありがとうございました。

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