ゲーム開発

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

3
オンラインゲームのプロトタイプを作成するにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 ライブラリ、エンジン、または単にネットワーク化されたプログラム間での情報の共有とメッセージの送信のタスクを大幅に簡略化する単純な設計パターンさえ知っているかどうかを知りたいので、ネットワークコードを書き直す代わりにゲームプレイの微調整に集中できます。ネットワークゲームのプロトタイピング。これはプロトタイプを対象としているため、速度とセキュリティよりも使いやすさと柔軟性がはるかに重要です。

3
Vector3対Vector2-パフォーマンス、使用法?
私は現在XNAをいじって、シンプルな2Dプラットフォーマーを作成しています。複数のレイヤーを追加して少し挑戦することを考えていました。 Vector2自分の位置にを使用する代わりに、を使用してVector3、Zレイヤーの深さとしてのみ使用します。ただし、不明な理由[1]の間Vector2で演算子を使用できないVector3ため、ゲーム内の他のすべての、たとえば、加速、速度、オフセットを変更して、エラーなしで実行できるようにしました。Vector2position += offset また、回転変数をからfloatに変更し、Vector3そのZ値を使用してテクスチャを回転させました。私が使用することを計画していますXし、Y規模フリップあなたはスーパーペーパーマリオ効果を得るので、私のテクスチャをします。 しかし、これらVector2のすべてをsで変更した後Vector3、私はそれについて少し気分が悪くなりました。これはゲームのパフォーマンスにどのように影響しますか?私の小さなプラットフォーマーゲームのパフォーマンスについて心配する必要はないはずですが、それだけに興味があります。 間の任意の顕著なパフォーマンスがありVector2sおよびVector3sがそれらを追加したり掛けるとき、たとえば、または呼び出すときNormalize、TransformまたはDistance? [1]余談ですが、Vector3とVector2の間の計算に演算子がないのはなぜですか?

1
ボクセル地形との衝突を有効にするためにbtCollisionAlgorithmを拡張するにはどうすればよいですか?
私はBulletを使用しており、適切な衝突応答とともに、キューブベースの地形から接触点を生成する衝突アルゴリズムを作成しようとしています。また、ボックス以外の形状も含めるように拡張する予定ですが、現時点では重要ではありません。三角形のメッシュを使用することは、大きなマップにとってはRAMを独占しすぎることを発見しました。 ここでByte56 で概説されている手順を試しましたが、Bulletを使用してこれを実装することについて、いくつか質問があります。 どのようにして世界の衝突形状を生成しますか?カスタム形状を使用していますか?あなたはそれに何を設定m_shapeTypeしますか? それとも、あなたはまだ世界のサイズの箱形を使用していますか? 連絡先を確実に解放するにはどうすればよいですか? どのように正確に変更しprocessCollisionますか? 私がやったこと: この形状のみを持つオブジェクトのディスパッチャーに新しい衝突アルゴリズムを登録できるようにするために、terrainShape that extendsbtBoxShape , the only difference being thatm_shapeType = CUSTOM_CONVEX_SHAPE_TYPE` を作成しました。 私は拡張しましたbtRigidBodyが、(2番目の段落内のリンクを参照してください)彼の質問でByte56と同様にクラスがcheckCollisionWith(CollisionObject * co)あればtrueを返す任意ののAABBにおけるボクセルがco空気ではありません。 次のようにして、とbtCollisionAlgorithm同様の方法でクラスを拡張しました。btCompoundCollisionAlgorithmprocessCollision 引数として渡された衝突オブジェクトをチェックし、どちらが地形で、どちらがエンティティであるかを判別します。 多様体の子アルゴリズムをクリアします。 コール resultOut->setPersistantManifold(resultOut) 衝突するエンティティが占めるAABBで新しいボックス形状と変換を生成し、を呼び出しますm_dispatcher->findAlgorithm。AABB内のボクセルごとに、形状、変換、および検出されたアルゴリズムをChild Algorithm構造体に保存します。 すべての子アルゴリズムを繰り返し、を呼び出しproccessCollisionます。 すべての子アルゴリズムを反復処理し、衝突しているエンティティのAABBの外側にあるものをすべて削除します。(~btCollisionAlgorithm()次に呼び出すm_dispatcher->freeCollisionAlgorithm()) を呼び出しresultOut->refreshContactPoints()ます。 機能するもの:processCollisionプレーヤーのAABBが非空気ボクセルと交差するときに呼び出されます。 できないこと:衝突応答は単なる奇妙なものです...プレイヤーエンティティは上方に浮上し始めます。何かに入ると、激しく跳ね返ります。何かに足を踏み入れた後、1つの軸上で動き続けることができない場合があります。おそらく、プレイヤーエンティティが常にワールドオブジェクトのAABBにあるため、衝突応答後に接点が解放されていないのではないかと思います。に関して正しい木を吠えているprocessCollisionかどうか知りたいです。

1
ルール/検証設計パターン
チェスのようなゲームのルール/検証システムを作成するために使用できるデザインパターン(これは単なる例であり、実際のゲームにはより難しいルールのセットが必要です) 私はこのサイトでいくつかの質問を読みましたが、決定的な答えも、正しい方向に向かっている答えも見つかりませんでした。 このシステムには次のものが必要です。 ルールが適用されているすべてのオブジェクトは、検証の開始点であるメソッドを持つ特定のインターフェースを実装する必要があります ルールは2つのステップで適用する必要があります。まず、検証する必要があります(ポーンAが正方形D4に移動できます)。trueの場合はメソッドAを実行し、falseの場合はメソッドBを実行します。 すべてのオブジェクトには、特定の順序で適用する必要がある複数のルールを含めることができます。ルール1が終了すると、ルール2が検証を開始します。 すべての個別のルール(たとえば、1つの正方形のみを移動でき、斜めにしか移動できないなど)は、独自のクラスに属し、再利用可能で、ルールを必要とするオブジェクトに適用できる必要があります。 これはバックエンドのマルチプレイヤーゲームで使用されることに注意してください すべてのルールは、その有効性をテストするために複数のオブジェクトを必要とすることに注意してください。たとえば、通常、ポーンは1マス移動できますが、今度はゲームボードの次のスクエアが対戦相手のポーンで埋められます。結果:ポーンは移動できません。ポーンには、他のポーンの位置、または検証にゲームボードを含める必要があります。 これらのルールの別の言葉は、行動の制限です。

1
衝突検出により画面の描画が遅くなる
私は最近ゲーム開発を趣味として追求しており、ゲーム開発のインとアウトを学ぶためには、ゲームを作成し、すべてを自分でレンダリングする必要があると判断しました(ゲームエンジンを使用せずに)。これはかなり複雑であることがわかりましたが、私は大きな進歩を遂げています。ただし、Androidフォンがグラフィックをレンダリングする方法に関連している可能性があると思われる問題が発生しました。この問題についての説明が必要です。 問題 私のゲームには、大砲に一連のボールが含まれています。ユーザーが画面を押すと、大砲がボールを発射し、エンジン(実装中)が位置情報の更新とそこからの衝突検出を処理します。さて、衝突検出を実装する前は、ゲームは非常にスムーズに応答しましたが、境界内にある場合にのみビードを描画し、それ以外の場合は壁から「跳ね返る」ようにエンジンに指示すると、エンジンはループの実行時間が大幅に長くなりました。 これは、ユーザーエクスペリエンスに提供しているレイテンシがなければ、問題ありません。たとえば、今画面に触れたとき、ボールが画面内を移動しているように表示されるまで約2秒かかり、まったく表示されない場合もあります。以前は、反応は瞬間的でした。 さらに、物理エンジンの衝突検出部分をコメントアウトすると、通常の応答動作が再開されます。 私がこの行動を引き起こしていると思うこと 注:私はこの仮定を取り消しました(以下の「デバッグ情報」を参照してください)。 私のゲームにはフレームリミッターが実装されておらず、ハードウェアで可能な限り高速にレンダリングされているため、画面に非常に多くの古いフレーム(バッファー内など)を描画していると思います物理を更新している間、描画に忙しい。これまでの私のデバッグでは、これが当てはまることを示していませんが、他の結論に達することはできません。 いくつかのコード このコードは、すべてが何をするのかを知らないことを理解するのがかなり混乱することに注意してください。誰かがいくつかのコードを操作することにこだわった場合に備えて、単にそれを含めました。変数は抜粋の下で明確にされています。 PhysicsEngine.updateBeadPositions(float): private void updateBeadPositions(float delta){ //Update all of the beads currently on the board. beads = control.getBoard().getValues(); temp_x = 0.0f; temp_y = 0.0f; //For each row... for(Bead[] row : beads){ //For each bead... for(Bead bead : row){ //If this bead …
8 android 

1
マルチプレイヤーゲームのタイムステップ
サーバー/クライアントマルチプレーヤーエクスペリエンスを作成するというコンセプトに頭を悩ませています。 私の問題は主にタイムステップに関連しています。次のシナリオを検討してください。 クライアントはサーバーに接続します。クライアントは入力をサーバーに送信して、移動したいことを示します。サーバーは入力をシミュレートし、ゲームの世界におけるそのクライアントの位置を決定します。 クライアントとサーバーの両方が異なるタイムステップで実行されているため、すべてのクライアントがサーバーと同期するように正確にシミュレーションするにはどうすればよいですか?私のサーバーは現在30msのタイムステップに設定されています。クライアントの移動を処理するとき、潜在的に何百ものリクエストが処理されるのを待っていますが、各リクエスト間の時間を示す方法はありません。 すべてを同期させるために、時間に基づいてサーバー上で適切にシミュレートする方法を本当に理解していません。

2
コンポーネントベースのエンティティシステムのメッセージ処理に関するヒント
コンポーネントベースのエンティティシステムを実装しようとしていますが、メッセージングの処理方法について少し混乱しています。システムをテストできるように、解決したい2つの問題があります。以下は私がこれまでに持っているコードです、 Entityクラス: class Entity{ public: Entity(unsigned int id): id_(id) {}; void handleMessage(BaseMessage &message){ for(auto element: components_){ element.second->handleMessage(message); } } template<class T> void attachComponent(T *component){ //Consider making safer in case someone tries to attach same component type twice components_[typeid(T).hash_code()] = component; } template<class T> void detachComponent(void){ components_.erase(typeid(T).hash_code()); } template<class T> T* …

1
奇妙な透明な穴がアーティファクトをレンダリングする
したがって、各サーフェスブロックにハイトマップを与えることにより、ブロックエンジンに「滑らかな」地形を実装しようとしています。 基本的に、各ブロックのこれらの「高さマップ」を生成するために私が行うことは、ブロックの端に沿って0.25の間隔で高さを生成することです。次に、ブロックの頂点を構築するために、高さをループして高さから高さに三角形を作成し、三角形の下に長方形を配置して次のようなものを作成します。 たとえば、ブロックのXの正側を作成するには、次のようにします。 Vector2[] uv = BlockUtil.UVMappings[(byte)side]; // uv[0] = top left float height; float nextHeight; float min; float tex_len = 1f / EngineGlobals.TEXTURE_ATLAS_SIDE; for (int i = 0; i < 4; i++) { height = (float)b.Heights[4, i] / 255f; nextHeight = (float)b.Heights[4, i + 1] / 255f; min = …

4
アイソメトリックタイルを描画するための最良のテクニック
HTML5 Canvasを使用してシンプルなアイソメトリックゲームを作成することを考えており、タイルをレンダリングする最速の方法は何だろうと思います。 タイルはひし形ですが、drawImageは四角形を描画するので、角(以下の黒い部分)を除外する必要があります。 私には3つの選択肢があると思います: アルファチャネル(.png)を持つ画像オブジェクトを使用します。パフォーマンスが低下する可能性があります。 クリッピングパスを使用します。レンダラーが最適化されている場合、これはかなり高速になる可能性があります。 このような正方形のタイルをプリレンダリングします: 私は黒い四角をメモリ内の1つの実際のタイルとして使用し、そのようなタイルを緑のフィールドとその隣、または上下にあるすべてのフィールドに描画します。対角線(青)のフィールドは、長方形のタイルの角で構成されます。これはクリッピングやアルファチャネルを回避しますが、タイルの可能なすべての組み合わせを事前レンダリングする必要があり、やり過ぎのようです。 アイソメトリックタイルを行うための最良または最速の方法は何ですか?FarmVilleなどの他のゲームは何を使用しますか?

3
.fbxファイルのインポートと表示
.fbxファイルのインポート/表示に少し問題があります。 私は例をチェックしましたが、私が最も興味を持っているもの(アニメーションとテクスチャー)は、私のようにこれに慣れていない誰かが理解するためにひどく文書化されています。 これは私が試したことです:頂点と法線を取得することができましたが、各頂点のテクスチャ座標を取得することに行き詰まっています。 これまでのところ私のコードです: 3dModelBasicStructs.h struct vertex { float x,y,z; }; struct texturecoords { float a,b; }; struct poligon { int a,b,c; }; Model.h #ifndef MODEL_H #define MODEL_H #define FBXSDK_NEW_API #define MAX_VERTICES 80000 #include "3dModelBasicStructs.h" #include <fbxsdk.h> #include <iostream> #include <GL/glut.h> using namespace std; class Model { public: Model(char*); ~Model(); …
8 c++  opengl  3d  models  fbx 

2
サーバー側ゲームループ
多くのJavaゲームでは、fpsを制御するためにthread.sleep()を使用しています。サーバーはグラフィックを表示しないので、サーバーのゲームループはデルタ時間を計算するだけで実行し続ける必要がありますか?この例のように: long lastLoopTime = System.nanoTime(); final int TARGET_FPS = 60; final long OPTIMAL_TIME = 1000000000 / TARGET_FPS; while (gameRunning) { long now = System.nanoTime(); long updateLength = now - lastLoopTime; lastLoopTime = now; double delta = updateLength / ((double)OPTIMAL_TIME); doGameUpdates(delta); }

3
OpenGLを使用してSDLで2D画像を描画する方法
結局のところ、openGLで2D画像を描画する方法を示す簡単なコードを見つけることができました。 #include "SDL/SDL.h" #include "SDL/SDL_opengl.h" #include "SDL/SDL_image.h" const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; const int SCREEN_BPP = 32; int tex; int loadTexture(char* fileName){ SDL_Surface *image=IMG_Load(fileName); SDL_DisplayFormatAlpha(image); GLuint object; glGenTextures(1,&object); glBindTexture(GL_TEXTURE_2D,object); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,image->w,image ->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels); SDL_FreeSurface(image); return object; } void init(){ glClearColor(0.0,0.0,0.0,0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0,800,600,1.0,-1.0,1.0); …
8 c++  opengl  sdl  windows 

3
OpenGL、FTGLのフォントの概要
ゲームでフォントをレンダリングするためにFTGLライブラリを使用していますが、テキストの周囲にアウトラインを作成する方法がまったくわかりません。影の作成は、次のように簡単にできるので簡単です。 (疑似コード) font.render(Color::BLACK, position.x + 1, position.y + 1); // Shadow font.render(Color::WHITE, position.x, position.y) // Normal text しかし、アウトラインを作成する方法は?残念ながら、インターネットでそれに対する興味深い解決策を見つけることはできませんでした。かなり奇妙に思えましたが、これは非常に人気のある問題だと思っていました。 大きなフォントだけでアウトラインを描くのは正しい方法ではありません。私が知ったように、この場合は文字が一致しないからです。 では、フォントのアウトラインを作成する簡単な方法はありますか?彼らは実際のゲームでそれをどのように行うのですか? どんな答えも事前にありがとう
8 c++  opengl  gui  fonts 

1
衝突チェックのために2つの高速移動オブジェクトを送信する必要があるかどうかの判断
基本的な2D物理エンジンを実行しています。これはほとんどパーティクルエンジンであり、AABBや円などの基本的な形状を使用するだけなので、回転はできません。私はCCDを実装しており、2つの高速移動オブジェクトに正確なTOIを与えることができ、すべてがスムーズに機能しています。 今の私の問題は、最初に2つの高速移動オブジェクトを互いにチェックする必要があるかどうかを判断する方法を理解できないことです。空間分割と高速移動オブジェクトごとに四分木を使用しています。通過する各セル内のオブジェクトと照合します。これは、静的なジオメトリとの衝突を決定するのにうまく機能しますが、衝突する可能性があるが、チェックされているセルのいずれにもない他の高速移動オブジェクトは考慮されないことを意味します。 私が考えることができる唯一の解決策は、セルを十分に大きくして、これで十分であるフィンガーをクロスさせるか、ある種のブルートフォースアルゴリズムを実装することです。これに対処する適切な方法はありますか、おそらく誰かがこの問題を効率的な方法で解決しました。それとも、これを説明するスペースを分割するより良い方法があるでしょうか? ここに図があります: オブジェクトAとBの「影響範囲」が交差しているため、それらを相互にチェックする必要があります。しかし、現在衝突をチェックしている方法では、これは考慮されていません。繰り返しになりますが、速度がxまたは何かよりも高くなったときにオブジェクトのパスが交差するかどうかを実際にチェックするなど、これに対するいくつかの解決策を考えることができますが、それはハックのように感じ、試行錯誤します。

2
カーレースゲームのブレーキアシストはどのように機能しますか?
PCカーレースのゲームには、このユニークな運転支援機能を備えた多くのゲームがあり、安全に車を回転させるためにブレーキをかけるのに役立ちます。一部のゲームでは「アシスト」にすぎませんが、車のブレーキには役立ちますが、安全な方向転換は保証されません。他の人の間では、ブレーキアシストが安全な方向転換に役立ちます。私はそれを達成するために従うアルゴリズムが何なのか疑問に思っていました。 私が考えることができる非常に基本的なアルゴリズムは、 曲がる半径に応じて、トラックのすべての曲がり角で理想的な車の制動距離を事前に決定し、それに応じて車の制動を開始します。たとえば、90 o未満のターンの場合、車はターンの開始から50mの距離で自動的にブレーキをかけます。 安全な方向転換を保証するより高度なアルゴリズムは、 各ターンの開始時の車の速度を、トラック、ターン、車ごとに個別に事前に決定します。また、各自動車の減速率を個別に事前に決定します。これは、自動車の性能のために異なります。 ブレーキアシストは、特定の瞬間の車の速度を記録し続けます。 ターンの開始時に必要な正確な速度に車が到達するように、適切に車にブレーキをかけます。 たとえば、半径43mのターンの開始時の特定の車の速度を120km / hとします。車の減速率を200km / h 2とする。ある時点で車の速度が200km / hの場合、車はターンの開始から400mで自動的にブレーキをかけます。
8 physics  racing 

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