ゲーム開発

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

3
2D AABB vs AABB Sweep:ヒットノーマルの計算方法は?
2D AABBvsAABBスイープキャストをゲームに実装しましたが、スイープキャストのヒットノーマルを計算するのが困難です。 AとBの両方のAABB位置とxy min-maxのスイープ方向があり、動作する最初と最後のヒット時間はありますが、衝突エッジまたは法線方向はありません。この特定の問題に対する効率的な解決策を概念化することはできません。何か案は?:) *編集 これは私がこれまで持ってきたものです- ゴメスとクリスター・エリクソンの AABBスイープの単なる一般的な実装です。通常のヒットはないので、通常の計算は私には謎ですが、キャラクターコントローラーに対して衝突応答を生成することはできません。 bool SweepVelAABBvsAABB(AABB a, AABB b, Vector2 v, out Vector2 outVel, out Vector2 norm ) { outVel = v; //Initialise out velocity norm = Vector2.zero; if( AABBvsAABB(a,b) ) return true; //return early if a,b overlap v = -v; float hitTime = 0.0f; float …

5
Windowsで経過時間をミリ秒単位で取得する最良の方法
2つのFILETIMEを使用して、それらをULONGLONGにキャストし、ULONGLONGを減算して、結果を10000で除算しようとしています。ビジュアルスタジオ2008エクスプレスエディション。これは私が使っているものです: FILETIME filetime,filetime2; GetSystemTimeAsFileTime(&filetime); Sleep(100); GetSystemTimeAsFileTime(&filetime2); ULONGLONG time1,time2; time1 = (((ULONGLONG) filetime.dwHighDateTime) << 32) + filetime.dwLowDateTime; time2 = (((ULONGLONG) filetime2.dwHighDateTime) << 32) + filetime2.dwLowDateTime; printf("ELAPSED TIME IN MS:%d",(int)((time2-time1)/10000));
8 c++  windows 

1
ゲームクラスと主な機能
メインのゲーム機能と画面などのゲームオブジェクトのインスタンスを含むGameクラスがあります。私のゲームはC ++とSDLを使用して作成されています。 しかし、私はクラスの関数をメインにするべきだと思いましたか?それとも「ゲームゲーム」をやればいいの?「int main();」から そして、メインの中にループがありますか? 私の疑問は-外部メインからそれを行う場合、私のもののほとんどはパブリックでなければならないでしょう、そしてそれはちょっと悪いですよね? 何か案は?ありがとうございました!
8 c++  sdl 

2
Gametime.TotalMillisecondsに制限はありますか?
ゲーム時間は常に増加している必要があり、合計ミリ秒が最大値になります。したがって、仮にゲームを1日間実行した場合、この値は86 400 000になります。 これはほとんどのゲームではおそらく問題ではありませんが、大きくなりすぎた場合、または制限が存在する場合でも、何らかのフェイルセーフメカニズムがあるかどうか知りたいです。
8 xna  c# 

1
glCreateShaderがセグメンテーション違反を引き起こす
sfmlでシェーダーを使用しようとすると、シェーダーを作成できません。関数glCreateShader(GL_VERTEX_SHADER); セグメンテーション違反が発生します。最初にグーグルで調べたところ、プログラムがopenglコンテキストを持っていない場合にそうなることがわかりました。私は最初にSDLを試しましたが、不十分なドキュメントと「ヘッダーを見て何をすべきかを知る」ことでsfmlに行きました セグメント障害の原因となるコードは次のとおりです sf::Window App(sf::VideoMode(800, 600, 32), "SFML OpenGL"); // Set color and depth clear value glClearDepth(1.f); glClearColor(0.f, 0.f, 0.f, 0.f); // Enable Z-buffer read and write glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); // Setup a perspective projection glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); //... gcc linuxでopengl 2.1を使用して、glew、gl.h、sfml-window、sfml-systemを含めています。 何が欠けている?
8 opengl  sfml 

4
「Ping」と呼ばれるピンポンクローンは、著作権や商標を侵害していますか?
要するに、私はレトロなPongクローンを作成し、それを最初のアプリとしてApp Storeに提出しました。それは少しの間生き残ったが、私は最終的にアタリからそれを削除するように言うメッセージを受け取った。それ以上はありませんでした。私はそれを取り下げただけで、他の要求はしませんでした。それ以来、削除されたままです。 私は今、はるかに優れたプログラマーになりました。今、元のアプリを再作成して、もう一度アップロードしたいと考えています。しかし、私はその種の何かが再び起こると思います。法律に反してゲーム自体を作り直すことはありますか?そうでない場合、「スーパーピン」の代わりに「スーパーピン」という名前を使用することは合法でしょうか。

3
C#またはC ++を使用してマウスとキーボードをシミュレートするにはどうすればよいですか?
Kinectの開発を開始したいのですが、最も難しいテーマは、キーボードとマウスの入力を任意のアプリケーションに送信する方法です。前の質問で、このデバイス用に独自のドライバーを開発するようアドバイスを受けましたが、これにはしばらく時間がかかります。 SendMessageをシステム全体の入力に変換できるゲートのようなアプリケーション、またはこの入力を送信するAPIを備えたドライバーアプリケーションを想像します。では、C#やC ++とやり取りできるドライバーやシミュレーターはあるのでしょうか。 小規模版:SendMessage、PostMessage、keybd_eventは、共通のメッセージループを持つWindowsアプリケーションでのみ機能します。したがって、低レベル、カーネル、レベルで機能するドライバーアプリケーションが必要です。

2
太りなど、特定の機能を制御する機能をプレイヤーに与えるには、どのようなテクニックを使用できますか?
私はキャラクターのカスタマイズツール(たとえば、基本モデルから始めて、プレイヤーが自分の太りをコントロールできる)に取り組んでいるので、このトピックに関するアイデア、テクニックなどを探しています。 いくつかの調査の後、私はこの手法を考えました:2つのモデル(1つの標準的な人間と1つの太った人間、両方とも頂点と三角形のような同じデータを持つ)から始めて、2つの元のメッシュに関するデータを格納することによって新しいモデルを作成します(例:ストア) 2番目のメッシュの頂点データをカラーデータとして)、シェーダーを使用してそれらの補間を制御します。 このアイデアについてどう思いますか?提案?

4
シェーダーでベクトルを別のベクトルで回転する
地形の各ポイントの法線を含む地形サーフェスがあります。 地形に適用する2番目の詳細法線マップがあります。 これらの法線は3スペースです。 両方の法線のY値は 常に正です。 両方の法線のX、Z値は、正/負/ゼロにすることができます。 2番目のベクトル(オレンジ)を回転させる1番目の法線ベクトル(青)は、ほぼ水平にすることができます。 計算が簡単/高速になれば、おおよそのソリューションで大丈夫です。 上の画像では、青い表面法線(1番目の法線マップから)、オレンジ色の法線マップ法線(2番目の法線マップから)、および目的の緑の法線が表示されています。 オレンジ色のベクトルの回転量は、青の法線ベクトルがXZ平面(DirectX座標系のようにYが上にある)と形成する角度とほぼ(または可能であれば正確に)等しくなければなりません。 次に、2番目のシナリオを示します。 上の画像では、青い表面法線がほぼ水平なので、2番目の法線マップがほぼ垂直な表面に適用されているため、オレンジ色の法線マップベクトルはさらに回転しています。 ローテーションはHLSLシェーダーで実装されています。 2番目の青い法線の方向に基づいて1番目のオレンジの法線を回転させる方法を教えてください。 編集:たぶん私は正接だけでなく正接と正接が必要ですか? これが私が正常になる方法です: float4 ComputeNormals(VS_OUTPUT input) : COLOR { float2 uv = input.TexCoord; // top left, left, bottom left, top, bottom, top right, right, bottom right float tl = abs(tex2D(HeightSampler, uv + TexelSize * float2(-1, -1)).x); float …

3
ポート転送なしのネットワーキング
ゲームにネットワーク機能を追加しようとしています。すべてのユーザーがゲームをホストでき、誰もがクライアントとして接続できるようにしたい。クライアントは、プレーヤーの位置などに関する情報をホストに送信します。ホストはメッセージを受信すると、それを検証し、他のクライアントにブロードキャストします。私は主にUDPを扱いますが、チャットやロビーなどのためにTCPも必要になります。 問題は、ルーターでポート転送を有効にしないと、クライアントからホストに、またはその逆にパケットを送信できないように見えることです。しかし、私はこれが必要だとは思いません。ポートフォワーディングが必要な理由は、LAN上の1台のコンピューターから別のLAN上の別のコンピューターにパケットを送信したいためですが、LAN内にあるため、どちらもグローバルIPアドレスを持っていません。そのため、実際には、他のネットワークのルーターをターゲットとするパケットしか送信できません。そのルーターは、到達したいマシンに転送する必要があります。では、ポート転送なしでこれを行うにはどうすればよいですか?どういうわけか、Webサーバーは、グローバルIPを持たない私のコンピューターと、ポート転送なしで通信できます。また、ポートフォワーディングを有効にする必要のないマルチプレイヤーゲームをたくさんプレイしました。だからそれは可能でなければならない。 ところで、私はSDL_Netを使用しています。でもこれが何かを変えるとは思いません。

4
2Dプラットフォーマーの衝突処理
2Dプラットフォーマー(マリオタイプ)ゲームを作成しようとしていますが、衝突の適切な処理に問題があります。私はこのゲームをC ++で書いており、入力、画像の読み込み、フォントの読み込みなどにSDLを使用しています。また、グラフィックを表示するためにSDLと組み合わせてFreeGLUTライブラリを介してOpenGLを使用しています。 私の衝突検出方法は、AABB(Axis-Aligned Bounding Box)です。必要なのは、衝突が発生した側を検出し、衝突を適切に処理する簡単な方法です。したがって、基本的に、プレーヤーがプラットフォームの上部に衝突した場合は、プレーヤーを上部に移動します。側面に衝突がある場合は、プレーヤーをオブジェクトの側面に戻します。底に衝突がある場合は、プラットフォームの下にプレーヤーを再配置してください。 私が試してみました多く、このような浸透深さを見つけようと侵入深さによって後方プレーヤーを再配置するようにこれを行うためのさまざまな方法を、。残念ながら、私が試したことは何も正しく動作していないようです。プレイヤーの動きが非常にグリッチになり、望まないときにプレイヤーの位置を変えます。その理由の1つは、おそらくこれはとても単純なものだと思っているためですが、考えすぎています。 誰かが彼らが助けることができると思っている場合は、以下のコードを見て、可能であればこれを改善するのを助けてください。これを処理するためにライブラリを使用しないでください(自分で学びたいので)、または可能であればSAT(分離軸定理)のようなものを使用しません。よろしくお願いします! void world1Level1CollisionDetection() { for(int i; i < blocks; i++) { if (de2dCheckCollision(ball,block[i],0.0f,0.0f)==true) { de2dObj ballPrev; ballPrev.coords[0] = ball.coords[0]; ballPrev.coords[1] = ball.coords[1]; ballPrev.coords[2] = ball.coords[2]; ballPrev.coords[3] = ball.coords[3]; ballPrev.coords[0] -= ball.xspeed; ballPrev.coords[1] -= ball.yspeed; ballPrev.coords[2] -= ball.xspeed; ballPrev.coords[3] -= ball.yspeed; int up = 0; …

5
シェーダーを使用せずにOpenGLで2Dゲームのオブジェクトをぼかす方法はありますか?
OpenGLでシェーダーを使用せずにオブジェクトをぼかす良い方法はありますか? 現在、ぼかしは、オブジェクトを元の位置からわずかに上、下、左、右、および4つの対角線としてレンダリングすることで実現しています。これを行うにはもっと良い方法があるはずです。2Dシーンで作業しています。
8 2d  graphics  opengl 

3
JSブラウザーゲームとnode.jsサーバー間の通信のヒント?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 私はいくつかの単純なCanvasベースの洞窟フライヤーゲームをいじくり回しており、最終的にそれをマルチプレイヤーにしたいと考えています。サーバー側でNode.jsを使用する計画です。 送信されるデータは、各プレーヤーの位置、方向、速度などで構成されます。プレーヤーの動きは単純な力の物理学なので、サーバーからの次の更新の前に動きを推定できるはずです。 通信側のヒントやベストプラクティスはありますか?私はウェブソケットが行く方法だと思います。ゲームループのすべてのパスで、または指定された間隔で情報を送信する必要がありますか?また、それが古いブラウザーで動作しないかどうかは気にしません。

2
グラフからマップを作成する方法
別のソースから提供されたデータに基づいて2Dポリゴンマップを描画して、マップでのアクションの分析を容易にしたいと考えています。データの形式は次のとおりです。 1 ['2', '4', '5', '7', '17', '10'] 2 ['1', '3', '4'] 3 ['2', '11', '4'] 4 ['1', '2', '3', '11', '13', '18', '5'] 5 ['1', '4', '18', '17'] 6 ['7', '8'] ... 最初の番号はノードのIDです。次のリストには、その隣接ノードのIDが含まれています。ノードの隣接ノードの数が異なるため、ポリゴンマップを描画する必要があります。 そこで、マップ表現にボロノイポリゴンを使用しようとしました。問題は、すべての近傍関係を満たすポイントをどのように決定できるでしょうか。私の最初の試みは、多かれ少なかれ私の試行錯誤のサイクルにおけるエラーだと思います。graphvizのsfdpツールを使用して、グラフのポイント位置を取得しました。 ポイントの位置を使用すると、次のマップ表現になります。 このアプローチの問題は、たとえばノード4と1が隣接しているが、ボロノイ図ではノードの位置が原因​​で隣接していないことです。私にとって、このアプローチは失敗しました。 グーグルで、ポリゴンまたはタイルを使用してマップを生成する多くのチュートリアルを見つけましたが、与えられたデータのマップを作成する方法はまだわかりません。(複数の)六角形/三角形/正方形または混合を使用して必要なものを達成するアプローチがあると思いますが、何を検索するかわかりません。 ここで私を助けることができるキーワードまたはアルゴリズムはありますか? 更新/結果:完全を期すために:これは、受け入れられた回答の提案を使用した後の私の結果です。

4
多くのエンティティにとって効率的な2D Java見通し線?
今日の私の問題はこれです: 私は多くの民間人を囲んでいますが、それらはarraylistに保存されているクラスです。 彼らが別の民間人のパニックを見たとき、彼らはパニックになり始めて、それは広がるでしょう。 まずStep()、イテレーターをループして各クラス関数を呼び出します。次に、Step()関数では、別の民間のイテレータを通過します。通過するときに、イテレータで他の民間人を見ることができるかどうかを検出しようとします。これは、パフォーマンス時間が0から50ミリ秒になり、市民が100人いる場合です。 これは私が修正する必要のある問題です。オブジェクトがポイントaからポイントbの邪魔になっているかどうかを簡単に検出できるようにしようとしました。 見通し線のコードは次のとおりです。 public static Object LOS(int x, int y, int x2, int y2, String Scan, Object Me, Object You) { DirectionX = (x-x2)/Quality; DirectionY = (y-y2)/Quality; CurrentX = x; CurrentY = y; String[] ScanArray = Scan.split(":"); for(int I=0;I<=Quality;I++) { for(String Type: ScanArray) { if(Type.equals("Boxs")) { Iterator …

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