ゲームプログラミング:一般的な方法とデザインパターン[終了]


9

私はOpenGL 3.xをよりよく学ぶことができるように非常にシンプルなゲームエンジンを書き始めましたが、3Dゲームの設計方法に関する経験が乏しく、まばらな知識なので、通常、クラスを設計する必要があることに気づく問題に直面します。違う。私が直面している他の問題は、ゲーム内で時間を簡潔に追跡し、必要に応じて動きを更新する方法と、レンダラーに再描画が必要であることを伝える方法です。また、オブジェクト間でさまざまなフラグを渡すためにGet関数とSet関数を作成する必要がありますが、これは悪い習慣ですか?

だから、タイトルが言うように、私は私を助け、ゲームデザインのいくつかの一般的なデザインパターン(つまり、ゲーム状態ハンドラー、フォントなど)を説明する本や記事/チュートリアル、ソースに興味があります。

ところで、私はまだfreeglutを使用していますが、先に進む前に、またはOpenGLをよく理解した後で、より良いウィンドウシステムに移行することをお勧めしますか?


12
標準の「私はエンジンを書いています」応答=エンジンではなくゲームを書き込みます。エンジンはうさぎの深い穴です。これまでにどんな研究をしましたか?ここでは、1つの焦点を絞った問題を選択し、過去の質問を検索することにより、最良の結果が得られます。ゲームの作成中に発生する新しい問題を1つずつ検索していきます。補足として、クラスに再設計が必要であることを理解することは一般的であり、それを行うプロセスは「リファクタリング」と呼ばれます。これは、学習しながら学んでいることを意味し、それは良いことです。
Patrick Hughes

1
お返事をありがとうございます。はっきりしていなければ申し訳ありませんが、本格的なゲームエンジンを構築するつもりはありませんが、クラスをよりよく設計できるように、ゲームデザインで使用される基本的なデザインパターンをいくつか学びたいと思います。一般的な問題にはいくつかの一般的な解決策があるはずだと思います。デザインを深く掘り下げるほど、問題が発生し続け、答えを見つけることが難しくなります。これまでのところ、私の研究はあまり実りがありませんでした。ゲームの構造をより深く掘り下げた素晴らしいチュートリアルは、codeproject.com / Articles / 27219 /…です。
グリーバーハート

1
見出しに「ゲームエンジンの一般的な方法」を含めると、議論が進む傾向があります... engines =)いずれにしても、探しているものを取得するのが難しいと思う理由は、マヤの暦には年があり、各タイプには独自のニーズがあるため、さまざまなタイプのゲームがあります。特定のタイプのゲームを探すと、検索エンジンにある程度の牽引力を与えるために、一人称シューティングゲームが非常に一般的です。
Patrick Hughes

私が探しているのは、FPSスタイルまたはフリーローミングです。本質的には、さまざまなグラフィックスやアニメーションのテクニックを試すことができる世界を作りたいと思っています。すでに基本的なカメラとジャンプやストラファニング、モデルの読み込みなどの動きがありますが、カメラのクラス内に歩行アニメーションを配置し、内部変数を使用してフレームをカウントするなど、それはまったく適切ではありません。私は主に穴にパッチを当てており、堅牢なものは何も作成していません。それは学習の過程の一部だと思います。おそらく、私はあまりにも速く移動しようとしています。
グリーバーハート

3
ゲームコーディングの完了、ゲームエンジンアーキテクチャはゲームのコーディングに関する2冊の本であり、開発パイプラインとその基盤となるテクノロジーの概要を説明します。彼らはすべてのことについて少し触れています
dreta

回答:


11

2ヶ月ほど前の段階だったので、正解を書いてみます。

私はOpenGL 3.xをよりよく学ぶことができるように非常にシンプルなゲームエンジンを書き始めましたが、3Dゲームの設計方法に関する経験が乏しく、まばらな知識なので、通常、クラスを設計する必要があることに気づく問題に直面します。違う。

心配しないでください。経験が不足していると、特定のクラスがエンジンで使用される可能性と方法のすべてについて考えることができなくなります。クラスの主な機能を検討して実装し、後で再構築するのが最善です。物事を考えすぎないでください。この段階で時間を無駄にしてしまいます。私の最初のゲームは完全に混乱していました。ほとんどの人がそうであったと思います。

私が直面している他の問題は、ゲーム内で時間を簡潔に追跡し、必要に応じて動きを更新する方法と、レンダラーに再描画が必要であることを伝える方法です。

必要なのは、ゲームループとは何かに関する知識です。ここから始めるのが良いでしょう。物理処理のようなより複雑なコードを書き始めたら、可変フレーム時間のループを検討する必要があるかもしれませんが、最初は小さいです。今のところは、単純な固定フレームゲームループで十分です。

また、オブジェクト間でさまざまなフラグを渡すためにGet関数とSet関数を作成する必要がありますが、これは悪い習慣ですか?

これは、ソフトウェアエンジニアリングの問題です。時間の経過とともに、保護する必要のあるデータと安全なデータがわかります。機能を実装して、その外部に公開されておらず、パブリックデータとして扱うことができるものを確認するのがおそらく最良の方法です。

それはすべて経験の問題です。カメラクラスを作成すると、変換マトリックスの横にあるカメラクラスに必要な機能が表示されます。すぐにヒントが必要な場合は、必要最低限​​の機能を実装し、後で拡張する必要があります。

記事と本:

  • ゲームエンジン開発

これらの本では、最新のゲームエンジンとパイプラインのアーキテクチャについて説明しています。基盤となるテクノロジーの概要を説明します。選択する必要がある場合は、最初の本をお勧めします。特定のテクノロジに「偏ることが少ない」のですが、最終的には、両方が優れた知識源であるため、両方を通過したいと思うでしょう。

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • 衝突検出

http://www.peroxide.dk/papers/collision/collision.pdf

(適切な3D衝突検出が行われる方法に関する記事を見つけるのが難しいため、これをリンクしています。)

本は他にもたくさんありますが、これ(特にゲームエンジンアーキテクチャ)を使い終える頃には、自分が何を求めているかがよくわかります。

ところで、私はまだfreeglutを使用していますが、先に進む前に、またはOpenGLをよく理解した後で、より良いウィンドウシステムに移行することをお勧めしますか?

WinAPI、Windowsプログラミングを学ぶ時間と意欲がある場合(Windows向けに開発している場合)。FreeGLUTは学習に適していますが、最終的にはより多くの機能が必要になります。ただし、完全に別の方法を使用する場合は、SFMLやSDLなどのライブラリを使用してOpenGLを起動できます。私のように頑固でない限り、FreeGLUTを使いましょう。WinAPIに直行しました。


ちょっとドレタ、私がそれを待っていたあなたの非常に素晴らしい答えをたくさんありがとう:P!幸い、物理シミュレーションのアルゴリズムを既に実装しているので、衝突検出の方法を既に知っています。
グリーバーハート

@ user1294203素晴らしかった、私は開始時に迷子だったので、
念の

プラットフォーム固有のコードをいじりたくない場合は、SFMLに投票します。それは小さく、簡単で、クリーンで、WINAPIをどのようにラップするかを理解するために、コードに簡単に飛び込むことができます。
edin-m 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.