ゲーム開発

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

1
拡張可能なアセット読み込みシステムをどのように構築すればよいですか?
Javaの趣味のゲームエンジンの場合、シンプルだが柔軟なアセット/リソースマネージャーをコーディングしたいと思います。資産は、音、画像、アニメーション、モデル、テクスチャなどです。数時間のブラウジングといくつかのコードの実験の後、私はまだこのことを設計する方法がわかりません。 具体的には、特定の資産タイプがどのようにロードされ、どこから資産がロードされるかを抽象化するような方法でマネージャーを設計する方法を探しています。他のプログラムがそれについて知る必要なしに、ファイルシステムとRDBMSストレージの両方をサポートできるようにしたいと思います。同様に、XMLであるアニメーション記述アセット(FPS、レンダリングするフレーム、スプライトイメージへの参照など)を追加したいと思います。XMLファイルを見つけて読み取り、AnimationAssetその情報を持つクラスを作成して返す機能を備えたクラスを作成できるはずです。データ駆動型の設計を探しています。 私は上の多くの情報を見つけることができますどのような資産運用会社がすべきではなく、上でどのようにそれを行います。関連するジェネリックは、何らかの形のクラスのカスケード、または何らかの形のヘルパークラスをもたらすようです。しかし、個人的なハックやコンセンサスのように見えない明確な例を見たことはありません。

3
履歴生成アルゴリズムはどのように機能しますか?
ドワーフ要塞というゲームについて聞いたことがありますが、YouTubeでフォローしている人の1人だけがそれについて解説しました。 さて、これらのアルゴリズムはどのように機能しますか?シミュレーションの長さを除いて、通常は入力として何を使用しますか?それらはどれほど具体的ですか? そして更に重要なことに; Javascriptで作成できますか、またはJavascriptが遅すぎますか?(これはシミュレーションの深さに依存しますが、例としてDwarf Fortressを取り上げます。)

3
アクションに副作用があるターンベースのゲームの設計
私はゲームDominionのコンピューター版を書いています。アクションカード、​​トレジャーカード、および勝利ポイントカードがプレイヤーの個人デッキに蓄積される、ターンベースのカードゲームです。クラス構造はかなりよく発達していて、ゲームロジックの設計を始めています。私はpythonを使用していますが、pygameで簡単なGUIを後で追加するかもしれません。 プレイヤーのターンシーケンスは、非常に単純なステートマシンによって管理されます。時計回りに回すと、プレイヤーはゲームが終了するまでゲームを終了できません。シングルターンのプレイもステートマシンです。一般的に、プレイヤーは「アクションフェーズ」、「購入フェーズ」、「クリーンアップフェーズ」をこの順番で通過します。ターンベースのゲームエンジンを実装する方法の質問への回答に基づいて?、状態マシンはこの状況の標準的な手法です。 私の問題は、プレイヤーのアクションフェーズ中に、自分自身または他のプレイヤーの1人以上に副作用のあるアクションカードを使用できることです。たとえば、1枚のアクションカードを使用すると、プレーヤーは現在のターンの終了後すぐに2ターン目を取ることができます。別のアクションカードを使用すると、他のすべてのプレーヤーは手札から2枚のカードを捨てます。さらに別のアクションカードは、現在のターンでは何も行いませんが、プレーヤーは次のターンに追加のカードを引くことができます。物事をさらに複雑にするために、新しいカードを追加するゲームへの新しい拡張が頻繁にあります。すべてのアクションカードの結果をゲームのステートマシンにハードコーディングすると、見苦しくなり、適応できなくなります。ターンベースの戦略ループへの答え この問題を解決するための設計に取り組む詳細レベルには入りません。 ターン内で行われるアクションによってターンを取るための一般的なパターンを変更できるという事実を包含するために、どのようなプログラミングモデルを使用すべきですか?ゲームオブジェクトは、すべてのアクションカードの効果を追跡する必要がありますか?または、カードに独自の効果を実装する必要がある場合(たとえば、インターフェイスを実装することによって)、十分なパワーを与えるにはどのようなセットアップが必要ですか?この問題に対するいくつかの解決策を考えましたが、それを解決する標準的な方法があるかどうか疑問に思っています。具体的には、アクションカードがプレイされた結果としてすべてのプレイヤーがしなければならないアクションを追跡する責任を負うオブジェクト/クラス/その他、および通常のシーケンスの一時的な変更との関係を知りたいターンステートマシン。

4
業界がCからC ++に切り替えたのはなぜですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 まず第一に、私は本当の答えを持ちたいです、私は常にさまざまなソースや記事からもっと多くを得ようとします、そしてC ++のようなものを読むとき、それは仮想関数を持ち、このCが優れているので、私は本当に何を言い、頭脳を持つ人間として考えるかわからない。回答でこのレベルに到達しないようにしてください。 私の質問は、Coomへの大規模な切り替えで、Doom 3でほぼ完了しました。 私にとって興味深いのは、このマイルストーンの前に、ほとんどのゲームエンジンとゲーム自体が、Quake時代以来のようにCで書かれていたことです。また、IDソフトウェアがIdTech 4のコードベースをC ++で完全に書き換えることを決定したことに注意するのも興味深いことです。これは、本当に良い理由のリストなしでは理解できない膨大な量の作業です。 私は主にOpenGLの世界に興味があり、私はこのトピックに集中しようとするので、Doom 3に焦点を当てています。したがって、私はこれについて多くのことを読みますが、そのような質問はrender-API -あまり問題のない不可知論者。 ある特定の時点で、業界が大規模にC ++に切り替えたのはなぜですか?IDが選択した理由は何ですか? 最後に言いたいのは、C ++は実装が非常に簡単で、提供する機能の数が少ないことです。これは、C ++が実際に頻繁に行うのとは異なり、断片化される可能性がはるかに低いためです。簡単に言えば、すべての機能が適切に実装された優れたC ++コンパイラではなく、本当に優れたCコンパイラを見つける機会がはるかに多くあります。 たとえば、Android向けNDKは、最新の優れた機能をすべて備えた(r8bリリースの)C ++サポートがまだ十分ではなく、世界で最も人気のあるモバイルOSのネイティブツールキットです。 世界で最も人気のあるOSの1つが立ち入り禁止になっているため、コードを最新のC ++で記述していたとしたら、おそらく今苦痛を感じるでしょう。また、Androidのように、他の多くのコンパイラーはそれほど優れていません。 2-3リリース古いC ++バージョンを参照するC ++コードを書く必要がありますか?
19 c++  c 

3
ゲーム内でランダムに湖や川を生成するにはどうすればよいですか?
2Dブロックビルディングゲームがあり、ランダムに生成された湖や川を作ろうとしています。Perlinノイズアルゴリズムを調べましたが、ランダムで素晴らしい結果を生成することができませんでした。 私はpythonノイズライブラリを使用しようとしましたが、マップをあまりランダムに作成しませんでした。 よりランダムにするために、そのライブラリに欠けているシード関数がありますか?よりランダムにしたい場合、どの変数を変更しますか?可能であれば、数学とPythonの用語を減らして、技術的な答えを減らしてください。 マップは2Dタイルマップです。他のアルゴリズムの非ランダム性の例を次に示します。次のコードは3回連続で出力されました。私は次のようなものでオクターブと周波数をランダム化していました:freq = 16.0 * random.randint(1, 500000) * 0.000001 + 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 …

8
ポーカーハンドの決定
私はアセスメントの一環としてテキサスホールデムゲームを作成しており、利用可能な7枚のカードを調べて手が存在するかどうかを判断する方法を検討していました。 私が考えることができる唯一の可能な方法は、カードを数字順にソートし、5枚のカードの可能な各グループを調べ、それらがすべての可能なハンドのリストと一致するかどうかを確認することです。訴訟は無関係であるため、それは長い時間がかかり、ペアを決定するためにのみ実行可能です。 カードはそれぞれ文字列であり、数字/ a / j / q / k、およびスーツ(char)3(小さなスペードシンボルを作る)で構成されています。 手分析システムの作成に役立つ提案、数式、リンクはありますか? まだお互いに手をランク付けすることを心配しないでください、それは魚の異なるやかんです。
19 c++  card-game  poker 

2
Visual C#Express Editionで作成されたXNAゲームを合法的に販売できますか?
Visual C#Express Editionをダウンロードしましたが、起動時に「評価目的のみ」と表示されます。これは何を意味するのでしょうか? これは、作成したゲームを合法的に販売するためにフルバージョンを購入する必要があるということですか?または、無料のエクスプレス版のみを使用できますか?私は本当にゲームを作りたくなくて、売れないことを知りたくありません。
19 xna  c#  legal 

5
オブジェクトが接続されたパスの周りをCWまたはCCWで移動しているかどうかを確認するにはどうすればよいですか?
ギザギザの形状があるとしましょう: そして、その輪郭に沿って移動する2つのクリーチャー。 次に、角を引き出して形状を完全に滑らかにします。 これを取得します。 オレンジがCWと緑のCCWを動かしているのは簡単にわかります。形状を滑らかにすることなく、どの方向に移動しているかを知るにはどうすればよいですか? 新しいイメージ
19 geometry 

4
どのオペコードがCPUレベルで高速ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 閉じた3年前。 すべてのプログラミング言語には、他よりも推奨されるオペコードのセットがあります。ここでそれらを速度の順にリストしようとしました。 ビット単位 整数の加算/減算 整数の乗算/除算 比較 制御フロー フロートの加算/減算 フロート乗算/除算 高性能コードが必要な場合は、C ++をアセンブリで手作業で最適化して、SIMD命令またはより効率的な制御フロー、データ型などを使用できます。したがって、データ型(int32 / float32 / float64)または使用される動作(*、+、&)、CPUレベルの性能に影響を与えます。 CPUでの単一の乗算は加算よりも遅いですか? MCU理論では、オペコードの速度は実行にかかるCPUサイクルの数によって決定されることを学びます。では、乗算に4サイクルかかり、加算に2サイクルかかるということですか? 基本的な数学および制御フローのオペコードの速度特性は正確に何ですか? 2つのオペコードの実行に同じサイクル数が必要な場合、両方のパフォーマンスコードはパフォーマンスの向上/損失なしで互換的に使用できますか? x86 CPUのパフォーマンスに関して共有できるその他の技術的な詳細は歓迎します

6
互換性とパフォーマンスを考慮して、OpenGLのどのバージョンをコーディングする必要がありますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 去年閉鎖されました。 OpenGLの仕様が更新されると、機能が追加されるだけです。したがって、理論的には、コアプロファイルと互換性プロファイルをサポートする最新かつ最高のハードウェアは、非常に古いOpenGL1.1コードを正常に実行するはずです。これは事実であることが判明しました。私はOpenGL1.1の学習に12か月を費やし、それをかなり理解しています。 私はそれらの派手な新しいOpenGL4.2の本のいくつかの章を読みました。私が依存するほとんどすべての機能は非推奨になりました(表示リストなど)。これらすべてのことを行うより良い方法があると仮定できます。 1.1がすべての最新のハードウェアで完全にサポートされる可能性が高いと考えてみましょう。1.1は1992年にリリースされました。20 歳のPCをサポートするためだけに難しい方法をコーディングしているわけではありません。:-pほとんどのゲーマーが5年ほど前のミッドレンジで底を打つハードウェアを実行していると仮定するのは合理的だと思います。 新しいメソッドは、一般的に次の2つのいずれかになるように設計されていると思います。パフォーマンスの向上またはコーディングの容易さ。私はどこかでその両方ではないことを読んだ!XD 〜5年前のハードウェアで最も広くサポートされているOpenGLのバージョンは何ですか?これらの考慮事項を考慮して、どのバージョンを使用するのが最も理にかなっていますか?
19 opengl 

5
円(画像)内のランダムポイント(ピクセル)を計算する
特定の場所に特定の直径の円を含む画像があります。私がする必要があるのは、円内のランダムな点を計算し、その点が相関するピクセルを操作できるようにすることです。私はすでに次のコードを持っています: private Point CalculatePoint() { var angle = _random.NextDouble() * ( Math.PI * 2 ); var x = _originX + ( _radius * Math.Cos( angle ) ); var y = _originY + ( _radius * Math.Sin( angle ) ); return new Point( ( int )x, ( int )y ); } …
19 c#  algorithm 

3
レンダリング出力を単体テストするにはどうすればよいですか?
最近、テスト駆動開発(TDD)を採用していますが、開発成果とコードベースの復元力に素晴らしい影響を与えました。このアプローチをOpenGLで行うレンダリング作業の一部に拡張したいと思いますが、これに対する良いアプローチを見つけることができませんでした。 具体的な例から始めて、どの種類のことをテストしたいかを理解します。ある軸を中心に回転する単位立方体を作成し、いくつかのフレームで各フレームが正しくレンダリングされるようにしたいとしましょう。 自動テストケースを作成するにはどうすればよいですか?できれば、キューブをレンダリングするコードを書く前にテストケースを書くことさえできます(通常のTDDの慣例に従って)。とりわけ、キューブのサイズ、位置、および向きがレンダリングされた各フレームで修正します。シェーダーのライティング方程式が各フレームで正しいことを確認したい場合もあります。 私が出会ったこれに対する唯一のリモートで有用なアプローチは、レンダリングされた出力を参照出力と比較することです。これは一般にTDDの実践を排除し、非常に面倒です。 他の必要な要件については進めることができますが、既にリストした要件は手の届かないところにあると思います。

2
ゲームを磨く:いくらですか?
私はあなたがインディー開発者であり、独自の(または無料/パートナーベースの)アートワークをやっていると仮定しています。また、新しいゲームに進むための外部からのプレッシャーはないと想定しています。ゲームを好きなだけ(または少ない)作業してから先に進むことができます。 そうは言っても、ゲームにどれだけ磨きをかけるかをどのように決定しますか? また、ゲームを半分(またはそれ以下)で終了するという悪名高いトラップに陥ることはないと想定しています。「良い(十分な)」まで、あなたがそれに取り組むための規律があること。 現在、大まかなサイクルがあり、コア機能を開発してから、コンテンツ/レベル/何であれ、退屈するまで磨きの層(アート、バグ修正、使いやすさの微調整)を追加します。改善の余地は常にありますが、「この時点で、あなたが磨きに戻ることはあなたがそれに費やしている時間/努力の価値がない」と言っている測定棒はありません。 新しいこと(グローエフェクトのレンダリング方法など)を学べば、これは常に価値があると思います。 また、あなたが尋ねる前に、私は彼らがそれが十分であるかどうかを尋ねるために、プレイヤーベースの多くを持っていません(そして、私が観察できるものもありません)。
19 process 

7
C ++コードで例外の安全性をどの程度重要と考えていますか?
コードを非常に例外安全にすることを検討するたびに、非常に時間がかかるため、それを行わないことを正当化します。この比較的単純なスニペットを考えてみましょう。 Level::Entity* entity = new Level::Entity(); entity->id = GetNextId(); entity->AddComponent(new Component::Position(x, y)); entity->AddComponent(new Component::Movement()); entity->AddComponent(new Component::Render()); allEntities.push_back(entity); // std::vector entityById[entity->id] = entity; // std::map return entity; 基本的な例外保証を実装するには、new呼び出しでスコープポインターを使用できます。これにより、呼び出しのいずれかが例外をスローする場合のメモリリークを防ぐことができます。 ただし、強力な例外保証を実装したいとします。少なくとも、コンテナの共有ポインタ(Boostを使用していない)、Entity::Swapコンポーネントをアトミックに追加するためのnothrow 、およびの両方にアトミックに追加するための何らかのイディオムを実装する必要がVectorありMapます。これらは実装に時間がかかるだけでなく、例外の安全でないソリューションよりも多くのコピーを必要とするため、高価になります。 最終的には、単純なCreateEntity関数が非常に例外安全であるように、そのすべてを行うために費やした時間が正当化されないように思えます。とにかく、ゲームにエラーを表示して、その時点で終了させたいだけでしょう。 あなたは自分のゲームプロジェクトでこれをどのくらい受け止めていますか?例外が発生したときにクラッシュする可能性のあるプログラムに対して、例外の安全でないコードを記述することは一般に許容されますか?

2
PygameでSNESモード7(アフィン変換)効果を実行する
pygameでモード7 /マリオカートタイプの効果を行う方法についての簡単な答えなどはありますか? 私は広範囲にグーグルで調べましたが、私が思いつくことのできるドキュメントはすべて、他の言語(asm、c)の多数のページであり、多くの奇妙に見える方程式などがあります。 理想的には、数学的な用語よりも英語で説明されたものを見つけたいです。 PILまたはpygameを使用して、画像/テクスチャ、またはその他必要なものを操作できます。 私は本当にpygameでモード7の効果を達成したいのですが、私はウィットの終わりに近いようです。ヘルプは大歓迎です。あなたが提供できるすべてのリソースや説明は、たとえそれらが私が望んでいるほど単純ではない場合でも、素晴らしいでしょう。 私がそれを理解できるなら、私は初心者ページのためにモード7をする決定的な方法を書きます。 編集:モード7 doc:http : //www.coranac.com/tonc/text/mode7.htm
19 pygame 

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