タグ付けされた質問 「c++」

C ++は、静的に型付けされた自由形式のマルチパラダイムでコンパイルされた汎用プログラミング言語です。

7
ゲームオブジェクトがC ++で誤って削除されるのを防ぐ方法
私のゲームには、プレイヤーで神風が爆発するモンスターがいるとしましょう。このモンスターの名前をランダムに選んでみましょう:クリーパー。そのため、Creeperクラスには次のようなメソッドがあります。 void Creeper::kamikaze() { EventSystem::postEvent(ENTITY_DEATH, this); Explosion* e = new Explosion; e->setLocation(this->location()); this->world->addEntity(e); } イベントはキューに入れられず、すぐにディスパッチされます。これにより、Creeperの呼び出し内のどこかでオブジェクトが削除されますpostEvent。このようなもの: void World::handleEvent(int type, void* context) { if(type == ENTITY_DEATH){ Entity* ent = dynamic_cast<Entity*>(context); removeEntity(ent); delete ent; } } Creeperオブジェクトはkamikazeメソッドの実行中に削除されるため、にアクセスしようとするとクラッシュしますthis->location()。 1つの解決策は、イベントをバッファにキューイングし、後でそれらをディスパッチすることです。それはC ++ゲームの一般的なソリューションですか?それはちょっとしたハックのように感じますが、それは異なるメモリ管理プラクティスを持つ他の言語での私の経験のためかもしれません。 C ++では、オブジェクトがそのメソッドの1つから誤って自分自身を削除するこの問題に対するより一般的な解決策はありますか?
20 c++  scene-graph 

6
エッジがラップされた世界での移動方向の検索
この質問は、Game Development Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 2Dワールドのある点から、エッジがラップされている別の点(小惑星など)までの最短距離方向を見つける必要があります。私は最短距離を見つける方法を知っていますが、それがどの方向にあるのかを見つけるのに苦労しています。 最短距離は次のとおりです。 int rows = MapY; int cols = MapX; int d1 = abs(S.Y - T.Y); int d2 = abs(S.X - T.X); int dr = min(d1, rows-d1); int dc = min(d2, cols-d2); double dist = sqrt((double)(dr*dr + dc*dc)); 世界の例 : : T : …
20 c++  algorithm 

3
ゲーム開発で使用されるメモリ割り当てパターン
私は独自のアロケーターメソッド(メモリプールやプロファイリングなどをサポートする)の作成を研究していますが、研究を続けるにつれて、ゲーム開発でこれがどのように行われるかを探していました。 どのようなメモリ割り当て手法を使用できますか、なぜそれが優れた手法なのでしょうか?

2
ゲームの仕事でC ++の実務経験を積む最良の方法(C#から提供)[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私はソフトウェア開発者であり、他のいくつかの言語とともにC#(5年の経験)を経験しています。 私の「夢の仕事」は、開発者としてビデオゲームで働いています。 ほとんどの仕事にはC ++の知識が必要ですが、私は現在持っていません(一部の基本を除きます)。 私は見て回ったが、ほとんどの大手ゲーム会社は、C ++の3〜5年の過去の経験に沿って何かを必要としています。 私の質問は、C#から来て、この必要な経験レベルに到達するための良いルートは何でしょうか? 私はそれを行ういくつかの可能な方法を考えました: C ++についての知識を書籍から入手してください。C ++で記述されたオープンソースプロジェクトに参加します。特にゲーム業界で、C ++を学習し、実用レベルの経験を積むための最良の方法は何でしょうか?

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 

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

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

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関数が非常に例外安全であるように、そのすべてを行うために費やした時間が正当化されないように思えます。とにかく、ゲームにエラーを表示して、その時点で終了させたいだけでしょう。 あなたは自分のゲームプロジェクトでこれをどのくらい受け止めていますか?例外が発生したときにクラッシュする可能性のあるプログラムに対して、例外の安全でないコードを記述することは一般に許容されますか?

3
WindowsでOpenGLバージョンをアップグレードしますか?
Platform SDKに含まれているバージョン1.1ヘッダーファイルより新しいものを使用できるように、WindowsでOpenGLのバージョンを更新するにはどうすればよいですか?SDK for Windows 7のバージョン7.0Aでさえ、OpenGLのバージョン1.1のGL.hとGLU.hのみを含んでいます。OpenGL 4.1サポートを含むボードにNVidiaドライバーをインストールしましたが、このパッケージにヘッダーファイルが含まれていません。
19 c++  opengl 

12
グラフィックスAPIの前の3D理論?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 5年前に閉鎖されました。 私はソフトウェアエンジニアであり、キャリアをゲーム開発に向けたいと考えています。現在、C ++ / DirectXを使用して2Dに関する本を読んでいます。3Dに入ると、正しくやりたいと思うようになります。たとえば、3Dスペースについては何も知りません。したがって、APIだけを学べば、それを知っているかもしれませんが、それを使ってインタラクティブなミニ3Dワールドを開発できるかどうかはわかりません。私は、最新のシェーダーなどで回転木枠を持っているだけで成功したとは思わないでしょう。私の数学スキルは、trig / linear代数までで、まだ大学にいます。もっと数学が来ることを知っています。OpenGL / Direct3Dやその他の提案を取り上げる前に、3D理論の本を読むべきですか?APIが3Dゲーム開発を教えるものではなく、その後失われることを望まないことを知っています。私は非常に本志向なので、そこに提案があればそれでも問題ありません。考えを歓迎します。ありがとう!
19 graphics  c++  opengl  directx 

7
浮動小数点数の解像度が原点からさらに低下するのはなぜですか?
OpenGLシーンには、原点から途方もなく遠くに位置するオブジェクトがあります。これらのオブジェクトを表示し、それらの周りでカメラをパン/回転/ズームすると、それらは「ジッター」します。つまり、オブジェクトを構成する頂点は、点の仮想3Dグリッドの周りにスナップしているように見えます。これは、浮動小数点精度(OpenGL、および他のほとんどすべてが使用する)を使用して格納できる情報量が多いため、よくある問題であると読みました。なぜこれが起こるのかわかりません。 解決策を探しているときに、非常に単純な「浮動原点」の修正に出会いましたが、うまくいくようです。オブジェクトが同じ相対位置にあるようにすべてを変換するだけですが、カメラの視線はすべて原点に近くなります。ここで説明を見つけました:http : //floatingorigin.com/、しかし、私はそれに従うことができませんでした。 だから...なぜ私のシーンを原点から非常に遠く(たとえば1000万単位)に配置すると、私が観察した不規則な行動になるのかを説明できますか?また、なぜ原点に近づけると問題が解決するのでしょうか?
19 c++  opengl 

2
起動時に大量のメモリを割り当てて解放すると、「メモリをクリーンアップしますか?」
ブックコンプリート、第4版コーディングゲーム、第5章(ゲームの初期化およびシャットダウン)、セクションのメモリーをチェックするには、この興味深いコードサンプルが含まれています。 bool CheckMemory(const DWORDLONG physicalRAMNeeded, const DWORDLONG virtualRAMNeeded) { MEMORYSTATUSEX status; GlobalMemoryStatusEx(&status); if (status.ullTotalPhys < physicalRAMNeeded) { // you don’t have enough physical memory. Tell the player to go get a // real computer and give this one to his mother. GCC_ERROR("CheckMemory Failure: Not enough physical memory."); return false; } …
18 c++  memory 

3
メモリー不足状態にどのように準備しますか?
これは、明確に定義された範囲のゲームにとっては簡単ですが、問題はサンドボックスゲームについてであり、プレイヤーは何でも作成および構築できます。 可能なテクニック: 上限のあるメモリプールを使用します。 定期的に不要になったオブジェクトを削除します。 回復メカニズムとして後で解放できるように、最初に余分な量のメモリを割り当てます。約2〜4 MBです。 これは、16 GB PCとは異なり、メモリが通常制限されているモバイル/コンソールプラットフォームで発生する可能性が高くなります。メモリの割り当て/割り当て解除を完全に制御でき、ガベージコレクションが関与していないことを前提としています。これが、これをC ++としてタグ付けする理由です。 私が話していないですので、予めご了承ください効果的なC ++項目7「メモリ不足の条件のために準備して、」それは、関連だにもかかわらず、私はより多くのあなたが、通常は何をより詳細に制御を持っているゲーム開発に関連する答えを見たいのですが、ハプニング。 質問をまとめると、メモリコンソール/モバイルが限られているプラ​​ットフォームをターゲットにしている場合、サンドボックスゲームのメモリ不足状態にどのように対応しますか?

2
クロスプラットフォームのゲームエンジン開発にC ++ 11を使用する
注:これは、C ++ 03およびC ++ 11に関する「意見を述べる」質問ではありません。 C ++ 03で記述されたゲームエンジンは、Windows、OSX、iOSでコンパイルされるように設計されています。Linuxサポートは(非常に)近い将来に予定されています。コンソールに関しては経験が限られているため、この質問をしています。 現在、C ++ 11に切り替えて、C ++ 11標準の非互換機能を使用すると、近い将来、現在のgenコンソール(おそらく、一部のコンソールでサポートされているコンパイラはまだC ++ 11をサポートしていませんか?知りません...)。 だから、複数のプラットフォームとコンソールで経験を積んだゲーム開発者は、新世代のコンソールが登場し、ほとんどの人がC ++ 11標準に切り替えられるまで、C ++ 03に固執すべきだと思いますか?または、ほとんどのコンソールは、すでにC ++ 11機能をサポートしているコンパイラー(VC ++、GCCまたはバリアント)を使用/サポートしていますか?

6
Vector3はVector2を継承する必要がありますか?
私はクラスのカップル作成していますVector2(X&Y)をし、Vector3(X、Y&Z)が、私はするかどうかわかりませんVector3から継承するVector2、またはにするかどうかのメンバ変数を再実装するm_xとm_y、再び?それぞれの長所と短所は何ですか(継承と再定義)。 編集: C ++(VS2010)を使用しています。
18 c++  architecture 

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