ゲーム開発

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

2
ベクターゲーム(ワイヤーフレーム、エリートのような)の理論と実装?
EliteやStar Wars Atariなどのベクターゲームが根本からどのように構築されたかについて詳しく知りたいです。問題は、OpenGLやDirectXのような最新の3D APIを使用してベクターグラフィックスを実装する方法ではありません。これを行うのは非常に簡単であり、ゲームのようにゼロからベクター/マトリックスシステムを構築する必要がないためです。 これらのゲームについて私が推測するいくつかのこと: 彼らは非常に低レベルで動作し、ASMで書かれています 彼らは実際の3Dゲームであり、After Burnerのようにそれを偽っていません。Wolfenstein 3Dとは異なります。アフターバーナーはrotozoom /ラスターエフェクトを使用し、Wolfenstein 3Dはレイキャスティングと2Dスケーリングを使用しました。上に移動できないため、実際には3Dではありません。Duke Nukem 3Dが使用したビルドエンジンが気に入っても、壁以外はすべてスプライトです。Star Foxは実際の3Dモデルを使用しているので、それに近いですが、実装はSNESのSuper-FXチップを使用しており、おそらくスキャンライントリックを採用しています。Eliteはおそらく(少なくともElite NESのような一部の実装では)上記のスキャンライントリックを使用していることを知っていますが、カスタムビルドのアーケードマシンを使用していたため、SWAについてはわかりません。どちらにせよ、私はそれについてもっと知りたいです。 それらの3Dモデルは実際の3Dモデルです。それらはベクトルとして定義され、カメラの位置に従って変換されます。 エリートのソースを分解して自分でどのように行われたかを確認することをお勧めしますが、その前に、それらがどのように作成されたか、および同様の手法を示す最新のオープンソースプロジェクトがあるかどうかを知りたいと思います。 。Oolite(OpenGLとObj-Cを使用)のようなEliteのリメイクを意味するのではなく、OpenGLのようなAPIを直接使用することを避け、OpenGLのようなAPIを直接使用しないプロジェクト-必ずしも低レベルのプロジェクトではなく、SDL(OGLなし)のような2Dライブラリを使用する少なくとも今のところは十分です。 MESA3Dのソースコードには、EliteやSWAなどのゲームが実装したルーチンの多くが含まれていることを知っています。ゲームのコンテキストでそれらを確認したいだけです。EliteとSWAが基本的に行ったのは、ラスタライズを実装し、モデルとローダーのフォーマットを作成したことです(少なくともSWAには、ツールを使用してモデラーから構築されたモデルがあると確信していますが、TIEファイターをハードコーディングすることは不可能ではありません)正確に行うのは難しいことです)、そして他の多くのことに気付かないかもしれません。しかし、それに入るのは本当に時間がかかり、そこにあるものの多くは気にしません。Eliteのようなゲームは、コンピューターとコンソールが当時持っていたROMとRAMが低いため、非常に軽量であったことを覚えておいてください。 私は3Dグラフィックスに不慣れです。すべての私の仮定は、3Dジオメトリと学校レベルの数学についての私の限られた知識に基づいています。しかし、私はこれらのゲームがどのように機能するかについて、詳細について知りたいと思っています。存在すれば、エリートや同様のゲームの開発についての本を購入します。いくつかの一般的な提案で十分です。

1
等角投影で最初に表示されるタイルを決定するにはどうすればよいですか?
ひし形のアイソメトリックマップの表示部分をレンダリングしようとしています。「ワールド」座標系は2Dデカルト系であり、座標は軸に沿って(ビュー座標系に関して)対角線上に増加します。「ビュー」座標は、単にビューの左上隅を基準にしたマウスオフセットです。 私のレンダリングアルゴリズムは、ビューの右上隅から始まり、右下に斜めに移動して斜めのスパンを描画し、ビューの右端に到達すると次の行に進みます。レンダリングループが左下隅に到達すると停止します。 ポイントをビュー座標から世界座標に変換してから、座標をマップする関数があります。 タイル0、0からレンダリングする場合はすべてが機能しますが、ビューがスクロールするにつれて、レンダリングは別のタイルから開始する必要があります。どのタイルが右上隅に最も近いかを判断する方法がわかりません。 現時点では、右上隅の座標をマップ座標に単純に変換しています。これは、ビューの原点(右上隅)が世界の内側にある限り機能しますが、マップの端に近づくと、開始タイルの座標が明らかに無効になります。 これは、「ワールドX軸とビューX軸の間の交点をどのようにして見つけることができるのですか?」

4
どうすればこの敵のデータベース実装を改善できますか?
私はRPGを開発していて、敵データベースの構築を開始する必要があるところにいます。これに関連するいくつかの課題と、私が検討してきたいくつかの解決策があります。 敵のデータベースで私がしなければならないことは次のとおりです。 次のデータを表す必要がある2つの主要な敵クラスがあります。 以下を含む基本敵クラス: Base Stats Status Resistance Table Elemental Resistance Table Steal Table Drop Table Level Unique ID Base XP AI Hook Name Display Name そして、次のフィールドを追加して、機器を追加する機能を追加する派生クラス: Main Weapon Secondary Weapon/Equipment Armor Accessories 今後、必要に応じてフィールドやクラスを追加する予定です。敵をデータベース化するための2つの可能な形式を検討しました。 XMLファイル 基本的には次のようにします。 <?xml version="1.0" encoding="utf-8"?> <Enemies> <Enemy name="Red Dragon" type="BaseEnemy" level="56" displayname="Red Dragon"> <Stats HP="55000" MP="2500" …

2
SpriteBatchで使用されているマトリックスとBasicEffectで使用されているマトリックスを整列させる方法を教えてください。
XNAを使用して、ユーザーが画面にテクスチャを配置できるWindowsツールを作成しています。 テクスチャの描画に使用されるSpriteBatchに「カメラ」を使用しています。例: Matrix matrixForSpriteBatch = Matrix.CreateTranslation( -_cameraPosition.X, -_cameraPosition.Y, 0.0f) * Matrix.CreateRotationZ(_rotation) * Matrix.CreateScale(_scale) * Matrix.CreateTranslation( GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2, 0.0f); これは正常に機能しています。ユーザーはキャンバスにテクスチャをドロップし、移動、回転、サイズ変更できます。また、カメラを動かしてより多くのものを見ることができます。 次に、ユーザーがクリックしてポリゴンのポイントを定義できるようにします。次に、これらのポイントが私のDrawPolygonFilledメソッドに送信されます。 public void DrawPolygonFilled( SpriteBatch spriteBatch, Vector2[ ] worldPoints, Color color ) { Matrix matrixForVertices = Matrix.CreateTranslation( _cameraPosition.X, -_cameraPosition.Y, 0.0f ) * Matrix.CreateRotationZ( -rotation ) * Matrix.CreateScale( …

4
2Dゲームの作成にはどの言語とツールを選択すればよいですか?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張ディスカッションを誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 最近、私は子供の頃の趣味(プログラミングゲーム)に戻り、とても楽しいと感じました。私はPyGame(Pythonの場合)を数か月いじり、教育目的でいくつかのプロジェクトを作成しました。PyGameは素晴らしいですが、PyGameを使用する商用ゲームはそれほど多くはありません。私は自分の時間を最善の方法で投資し、理想的には将来的にさらに費用をかけたいと思っています。 私の好きな事: 一人で物事を行う。私は巨大な企業で働いてWorld of Duty-7を少し作ることを夢見ていません LÖVE(Luaの場合)やPyGameなどのフレームワーク。私はそれなしでそれらの派手なピクセルを描く方法を理解することができるとは思えません クロスプラットフォームのもの。 無料のもの。 私が好きではないもの: C ++は私を怖がらせますが、私がどれほど愚かであるかを自由に教えてください GameMaker、RPGmakerなどのIDE。私は自分のツールを作るのが好きです。 私の目標は、テラリア、スーパーミートボーイ、DefConなどの2Dゲームを作成することです。目標を達成するには、どの言語とツールを選択する必要がありますか?
7 2d  pygame  love2d 

2
フレームレートに依存しない更新を実装するにはどうすればよいですか?
編集: jumpvelocityを変更して追加するものにし、yvelocityをjumpvelocity * tに等しくすることで問題を修正しました。これは私が今持っているものです: if (GUI->Space && grounded){ jumpvelocity = -185.f * 2 / gravity; grounded = false; } if(!grounded ){ if(jumpvelocity < terminaly){ jumpvelocity += 185.f * t * 4 / gravity; yvelocity = jumpvelocity * t; } else{ jumpvelocity = terminaly; yvelocity = jumpvelocity * t / gravity; …
7 c++ 

2
2Dゲームで非長方形のオブジェクトとの衝突を検出する方法は?
長方形のオブジェクトとの衝突の検出は非常に簡単です。シンプルなタイルベースのゲームを書くことができます。ここで、オブジェクトが長方形ではない可能性がある、たとえば山など、タイルベースではないゲームの作成方法を学びたいと思います。 丘と山のあるでこぼこした地形が必要だとしたら、地形の形状をどのように保存しますか?また、このような不均一なオブジェクトの衝突をどのように検出しますか?

2
LibRocketをSDLおよびOpenGLと統合する
私は現在ゲームプロジェクトに携わっており、メニューやその他のGUIを追加したいところまで到達しましたが、独自のシステムの開発に費やした時間は少し時間がかかる可能性があり、これはその一部です時間を無駄にしたくないシステムの。 したがって、GUIchan、CEGUI、最近のLibRocketなど、非常に柔軟で便利なUIライブラリについて読んでいます。私の質問は、LibrocketをC ++のSDL / OpenGLで開発されたプロジェクトと統合できるかどうかです。そのような情報を見つけることができないため、その情報がどこにあるかを知っている場合。
7 c++  opengl  sdl 

2
最新のOpenGLでレンダリングするためにデバッグプリミティブをバッチ処理する必要がありますか?
最近、いくつかの古いレンダリングデモを最新のOpenGLに移植し始めました。三角形、立方体、球などのデバッグオブジェクトをレンダリングするために、即時モードglBegin()、glEnd()などを使用する古いコードにデバッグ描画クラスがありました。 もともと私はこれらの関数のコードを、VAOとVBO(位置と色)を生成し、バインドし、頂点データを割り当て、レンダリングし、VBOとVAOを無効にして削除するコードに置き換えました。これに問題はありますか? 私はクラスを変更して、描画プリミティブ呼び出しを取得するたびにVAOとVBOを生成し、頂点データを割り当てますが、他のすべてのレンダリングが完了するまで実際にはレンダリングを行わないように考えています。次に、一度に保存されたすべてのデバッグプリムをレンダリングします。 私はこれを行う方法のどちらの利点があるのか​​わからず、人々が何を考えているのかと思っていました。
7 opengl 

3
あなたはそれらを改善するためにいつ古いウェブ/モバイルゲームを再訪すべきですか?
注:他のモデルよりも配布方法が簡単なモバイルゲームとWebゲームに固有のものにしたいと思います。 私のインターフェースの質問の例に基づいて、(予想通り)多くの作業が省略されているように見えます。その古い、熱狂的な化学ゲームを改善する余地はたくさんあります。 しかし、私は? 実際、いつ古いゲームを再検討して大幅に改善する必要がありますか? これを行わない理由はいくつか考えられます。 あなたは続編を書くつもりです(代わりにそれを改善してください) あなたはあなたの血のために(または改善のために)ハウリングしているプレーヤーがいません これは、これまでにないようなコードを書く可能性が低い、1回限りのゲームです。
7 release 

4
XNAでゲームリソースをどのように管理しますか?
昔はあちこちで使っContent.Load<type>("filename");てきました。これはすぐに管理の悪夢になり、さらに悪いことに、同じアセットの複数のコピーを複数の異なる場所にロードし始めます。 次に、基本的に次のようなResourcesクラスの使用に移りました。 public class Resources { public static Texture2D particle01; ... public static Texture2D particle93; public static Effect shader01; ... public static Effect shader32; public static Load(ContentManager content, GraphicsDevice device) { //load all the resources } public static Unload() { //unload all the resources } } 次にResources.particle01、同じ名前空間内のどこからでもリソースへの参照を取得するために単に使用できます。 これは、私が過去に持っていた重複を排除したので、素晴らしいアプローチでした。また、すべてのロードは単一のクラスで行われたため、リソースを追跡するのは簡単でした。最後に、たとえば右クリックして、particle93[すべての参照を検索]をクリックして、そのテクスチャを使用したすべての場所を見つけることができます。 しかし、このアプローチには問題があり、より良い解決策があるかどうか知りたいです。

2
ぼかしポイントライト分散シャドウマップ
私はゲームの分散シャドウマッピングの実装に取り​​組んでいます。エイリアスマップを適用するためにガウスぼかしをシャドウマップに適用して、分散シャドウマッピングでスポットライトを機能させることができました。現在、ポイントライトを実装しようとしていますが、キューブマップに格納されているシャドウマップで動作するようにガウスぼかしを適応させる方法がわかりません。しばらく探してみましたが、ポイントライトを使用した例を見つけることができません。誰かがここで私を手伝ってくれる?

2
Silverlight 5でGPUを使用して高速フーリエ変換を行う
遅いマシンで加速が必要なSilverlightのオーディオライブラリがあります。具体的には、このライブラリは、音響エコーキャンセレーションおよびノイズリダクションアルゴリズムの一部としてFFT変換を広範かつ繰り返し使用します。このためにGPUを使用するのが理にかなっているか疑問に思います(たとえば、ここ:http : //www.inf.fu-berlin.de/lehre/SS10/SP-Par/download/fft1.pdf)。 Silverlight 5がMicrosoftのXNAフレームワークのかなり単純なポートを提供していることは知っていますが、残念ながら、私は3Dコーディング全般、特にXNAの完全な初心者です。理論的には頂点および/またはピクセルシェーダーの組み合わせを使用してこの魔法を働かせることが可能であるように思えますが、この道を進む前に、いくつかの質問について専門家の意見を聞きたかったのです。 (1)SL5のXNA実装は、そのパイプラインの出力を単一の "DrawingSurface"にスローします。私はこれが計算の結果を読み取ることができるかもしれないと思っていました(WriteableBitmapを使用して、SL4のピクセルシェーダー計算の結果を読み取る方法の一種)。しかし、どうすればよいのかわかりません。「GetPixels()」メソッドなどはありません。通常のXNA 4.0では、VertexBufferにGetData()メソッドがあり、Texture2DおよびTexture3Dクラスと同じですが、これらのメソッドはSL5バージョンにはありません。シェーダー出力の結果を実際に読み取る方法を知っている人はいますか?または、GPUはSL5の書き込み専用デバイスですか? (2)GPU計算の本当の問題は、結果をすばやく読み取ることです。私が問題1を解決できると仮定すると、FFTがこの種のソリューションに適しているかどうか誰かが知っていますか? (3)Silverlight 5はHLSLレベル2に制限されています。HLSLレベル2には、命令、レジスター、使用可能な関数などに関して、いくつかの重大な制限があります。FFTまたはその一部をこれに移植できると期待することはまったく理にかなっていますか? 前もって感謝します。
7 xna  gpu  gpgpu 

3
XNAゲームループの更新と描画
ゲームのメソッドがどのように呼び出され、いつ呼び出されるかについて混乱しています。 だから私はシーケンスが次のとおりであることを読みました: 初期化 LoadContent 更新 ドロー UnloadContent ここで、3と4はゲームループです。したがって、after Updateが呼び出さDrawれ、次にが呼び出され、次にUpdate、then Draw、then 、... ゲームループ(更新と描画)は1秒あたり60回実行されます。 そして、私はそれを別の場所に読みUpdateとDraw異なる時間に呼び出すことができ、Update1時間前にもっとして呼び出すことができDraw等々 。 ...そして最後に、メソッドがUnloadContent呼び出された後に呼び出されます。UpdateExit
7 xna  game-loop 

8
確定的であるランダムに見えるアイテムの配置?
私は横スクロールゲームに取り組んでおり、背景の森を生成したいと考えています。品質が同じであることを確認するために、すべての人の背景を同じにしてください。シードされた乱数ジェネレーターにもアクセスできないため、適切なシードを見つけてそこから移動できません。 アイデア?

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