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

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

1
Bullet Physics-リジッドボディから直接光線を投射する(一人称カメラ)
Bulletを使用して一人称カメラを実装しました。これはカプセル形状の剛体です。Bulletを使用して数日しか経っていませんが、物理エンジンは初めてです。私はそれbtRigidBody::setLinearVelocity()を移動するために使用し、それは世界と完全に衝突します。唯一の問題は、Y値が自由に移動することです。これは、ボディを移動する前に、並進ベクトルのY値をゼロに設定することで一時的に解決しました。これは、高所から落下する場合を除いて、すべての場合に機能します。 体が背の高いオブジェクトから落ちた場合でも、移動ベクトルのY値がゼロに設定されているため、移動を停止して地面に落ちるまで速度は設定されます。これを解決するには、ボディからレイをダウンキャストしてワールドのY値を決定し、その値とカメラボディのY値の差を確認して、次の場合は動きを無効にするか、速度を遅くします違いは十分に大きいです。 光線を投射し、光線が当たった世界のY値を特定するだけで、少し行き詰まりました。私はこのコールバックを実装しました: struct AllRayResultCallback : public btCollisionWorld::RayResultCallback{ AllRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld), m_closestHitFraction(1.0){} btVector3 m_rayFromWorld; btVector3 m_rayToWorld; btVector3 m_hitNormalWorld; btVector3 m_hitPointWorld; float m_closestHitFraction; virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) { if(rayResult.m_hitFraction < m_closestHitFraction) m_closestHitFraction = rayResult.m_hitFraction; m_collisionObject = rayResult.m_collisionObject; if(normalInWorldSpace){ m_hitNormalWorld = rayResult.m_hitNormalLocal; } else{ …

1
浮動小数点精度(fp:preciseとfp:fast)
CまたはC ++では、浮動小数点精度のコンパイラオプションは、実際の(スモール/インディーズ)ゲームに本当に違いをもたらしますか? 私の観察によると、fp:fastの設定はfp:preciseよりも何倍も速く、私がここで理解していることから(/programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-encounter)2つのコンパイラオプション間の精度の違いは、浮動小数点数の16桁目からのみ変更されます。 fp:fastを使用しているときに2Dまたは3Dゲームでひどく間違った例を見つけた人はいますか? 編集:明確にするために、私は浮動小数点値自体の精度については質問していません(つまり、浮動小数点と倍精度と10進数)。コンパイラオプションに関連する精度についてのみ。
10 c++  c  floating-point 

4
衝突長方形の応答
移動可能な長方形を複数の長方形と衝突させるのに問題があります。 私はSFMLを使用していて、intersects2つの四角形を取り、その交差部分を返すという便利な関数があります。移動可能な四角形を衝突させたい四角形でいっぱいのベクトルがあります。私は次のコードを使用してこれをループしています(pは移動可能な四角形です)。 IsCollidingWithブール値を返しますがintersects、交点を計算するためにSFMLも使用します。 while(unsigned i = 0; i!= testRects.size(); i++){ if(p.IsCollidingWith(testRects[i]){ p.Collide(testRects[i]); } } そして実際のCollide()コード: void gameObj::collide( gameObj collidingObject ){ printf("%f %f\n", this->colliderResult.width, this->colliderResult.height); if (this->colliderResult.width < this->colliderResult.height) { // collided on X if (this->getCollider().left < collidingObject.getCollider().left ) { this->move( -this->colliderResult.width , 0); }else { this->move( this->colliderResult.width, 0 ); } …

3
ゲームエンティティの破棄を処理する適切な方法
エンティティのロードとロードが常に動的にロードされるゲームの世界を想像してみてください。それをエンティティのリストとして表すことができますが、それらを削除することはどうでしょうか? 追加するとき、新しいエンティティを押し戻すことができますが、コンテナ内の任意の場所を削除する必要がある場合があります。要素を検索して削除する位置を見つけるのを避けるには、どのような選択肢がありますか? エンティティIDをコンテナ内の位置として保存して、直接削除するためのパスを作成できると考えましたが、何らかの相互依存関係「障害」を生成しませんか? 私は正しい方法がList.RemoveAt(whereToRemove);のようなものになることを知っています。しかし、エンティティのみがいつ死ぬべきかを知っている場合はどうでしょうか? それとも私は何かが欠けているのですか?リストコンテナはオブジェクトが破壊されたときにそれを知って自分のサイズを減らしますか?

3
コンポーネントエンティティシステム-更新と呼び出し順序
コンポーネントがすべてのフレームを更新できるようにする(そしてこの機能を必要のないコンポーネントから除外する)ために、UpdateComponentコンポーネントを作成するというアイデアを得ました。MovableComponent(速度を保持する)などの他のコンポーネントは、IUpdatable抽象クラスを継承します。これによりMovableComponent、Update(gametime dt)メソッドへのポインタとへのポインタをRegisterWithUpdater()提供するメソッドの実装が強制されUpdateComponentますMovableComponent。多くのコンポーネントがこれを実行し、誰が何であるかを気にすることなくUpdateComponent、すべてのUpdate(gametime dt)メソッドを呼び出すことができます。 私の質問は: これは、正常または誰かが使用しているもののように見えますか?この件については何も見つかりません。 物理学などのコンポーネントの順序を変更してから位置を変更するにはどうすればよいですか?これも必要ですか? フレームごとに処理する必要があるコンポーネントが実際に処理されることを保証する他の方法は何ですか? 編集 私はエンティティマネージャに更新可能なタイプのリストを与える方法を検討していると思います。次に、そのタイプのすべてのコンポーネントを、エンティティごとに管理するのではなく更新できます(とにかく、私のシステムのインデックスにすぎません)。 まだ。私の質問は引き続き有効です。これが理にかなっているのか、通常のことなのか、他の人が何をする傾向があるのか​​はわかりません。 また、不眠症の人々は素晴らしいです! /編集 前の例のコードを煮詰めました: class IUpdatable { public: virtual void Update(float dt) = 0; protected: virtual void RegisterAsUpdatable() = 0; }; class Component { ... }; class MovableComponent: public Component, public IUpdatable { public: ... virtual void Update(float dt); private: ... …

5
ネットコードの扱い方は?
ネットコードがゲームエンジンに「フック」できるさまざまな方法を評価することに興味があります。私は現在マルチプレイヤーゲームを設計しています。これまでのところ、少なくとも、ネットワークソケットを処理するために、グラフィックループとスクリプトを処理する他のエンジンとは別のスレッドを用意する必要があると判断しました。 私は、ネットワーク化されたゲームを完全にシングルスレッド化する1つの潜在的な方法がありました。つまり、非ブロッキングソケットを使用して、各フレームをレンダリングした後にネットワークをチェックします。ただし、フレームのレンダリングにかかる​​時間がネットワークラグに追加されるため、これは明らかに最適ではありません。ネットワーク経由で到着するメッセージは、現在のフレームのレンダリング(およびゲームロジック)が完了するまで待機する必要があります。しかし、少なくともこの方法では、ゲームプレイは多かれ少なかれスムーズなままです。 ネットワーク用に別のスレッドがあると、ゲームはネットワークに完全に応答することができます。たとえば、サーバーから状態の更新を受信するとすぐにACKパケットを送り返すことができます。しかし、ゲームコードとネットワークコードの間で通信するための最良の方法について少し混乱しています。ネットワークスレッドは受信したパケットをキューにプッシュし、ゲームスレッドはループ中の適切なタイミングでキューから読み取るため、この最大1フレームの遅延は解消されていません。 また、パケットの送信を処理するスレッドは、パイプを下りてくるパケットをチェックしているスレッドとは別のスレッドにしたいようです。これは、パイプが途中にある間は送信できないためです。着信メッセージがあるかどうかを確認します。selectまたは類似の機能について考えています。 私の質問は、最高のネットワーク応答性を実現するゲームを設計するための最良の方法は何でしょうか?明らかに、クライアントはできるだけ早くユーザー入力をサーバーに送信する必要があるため、イベント処理ループの直後、両方ともゲームループ内でnet-sendコードを送信することができます。これは意味がありますか?

3
2DレーシングゲームのAIを構築するためのヒント
2Dレーシングゲーム用のAIを構築するための学校プロジェクトがあり、他のいくつかのAIと競合します(衝突なし)。 レーストラックの白黒のビットマップイメージが提供されます。マップを受け取った後、車の基本的な統計(ハンドリング、加速、最大速度、ブレーキ)を選択できます。AIはゲームのサーバーに接続し、現在の加速とステアリングの秒数を数回与えます。ちなみに私が選んだ言語はC ++です。質問は次のとおりです。 最高の戦略またはアルゴリズムは何ですか(私が試して勝ちたいので)?私は現在、ネット上で見つけたアイデアと自分のアイデアの1つまたは2つを念頭に置いていますが、コーディングを始める前に、私の見方が最高のアイデアの1つであることを望みます。そのことに関してどんな良い本がありますか?どのサイトを参照すればよいですか?
10 2d  c++  ai  racing 

2
Bulletを学ぶために、Box2Dの代わりにBulletを2D物理学に使用する価値はありますか?
質問にはこれ以上ありません。どちらも私の目的には問題ないので、オーバーヘッドについては気にしていません。基本的に、Farseer Physics EngineのおかげでBox2Dの概念に精通していますが、3DにジャンプするときにBulletを使用したいと思います。おそらく、Bulletは2Dの領域でも私にいくつかの教育的価値を持っていますか? 質問の一般化されたバージョンは次のとおりです。将来3D物理エンジンを利用する予定がある場合、2Dゲームに3D物理エンジンを使用する必要がありますか?または、これは教育的価値を提供しない時間の無駄ですか?

1
エンティティコンポーネントシステムにグローバルコンテキストデータをどのように保存しますか?
私の質問はこれです: グローバルコンテキストデータをどのように保存しますか。エンティティコンポーネントシステムの世界データ情報、現在の世界時間など? ドワーフフォートレススタイルのオープンエンドの世界シミュレーションゲームをC ++で構築することを考えています。私は楽しみのためにエンティティコンポーネントスタイルのゲームエンジンを構築しました。現在、必要なすべての機能でどのように機能するかを考えています。標準のゲームプレイ(レンダリング、物理、エンティティ固有のコンポーネントデータなど)に加えて、関連するすべてのシステムがアクセスできるグローバルコンテキストデータ(つまり、現在の年などの世界データ)も必要です、地球温暖化が起こっているかどうか、世界のシミュレーションに関連するあらゆる種類の事柄)。私はもともと「ワールド」コンポーネントを作ることを考えていましたが、多くの異なるシステムがこの論理的に「グローバル」なデータにアクセスする必要がある場合、これは無意味で難しいように見えます。 「ワールド」コンポーネントがあるのは理にかなっているでしょうか、それともこのデータを他の方法で保存すべきでしょうか? また、このデータを単にグローバルにして、それを使用したいすべてのシステムにアクセスできるようにすることも考えました。一般的にはエンティティコンポーネントの原則に違反しているように見えますが、他の理由で混乱しているようですが、実際に機能する可能性があると思いました。 私が考えたもう1つのことは、関連するワールドコンテキストデータをシステム自体に直接埋め込むことです。たとえばAgeSystem、getsWeakerAsTimePassesコンポーネントがあるかどうかに関係なく、すべてのエンティティが「古くなった」場合、おそらくこのシステムは、世界の関連する時間データをメンバーデータとして直接保存し、時間の経過とその量を計算するために使用できます。この3つ目のオプションは、私のお気に入りではありませんでしたが、ブレーンストーミングで思いついたことがあります。 誰かアドバイスできますか?

1
std :: vector実装を使用してスペルとアイテムを保存するにはどうすればよいですか?
私は現在GameInstituteの本をフォローしていますが、それは私に次のことを求めています: プレイヤーがヒーリングポーションとファイアボールのポーションを購入して運ぶことを許可します。アイテムクラスを定義した後、アイテム配列をプレーヤークラスに追加して保存するか、std :: vectorを使用して保存できます。 std::vector実装を使用したいと思います。これは、アイテムクラスを作成するより混乱しないようですが、その方法がわかりません。ベクトルは動的な値(アイテム、武器など)を格納するための優れた方法であると多くの人から聞いたことがありますが、それが使用されるのを見たことはありません。
10 c++  text-based 

3
リソースが多すぎるゲームで、リソースをどのようにパックしますか?
最近、Allegro 5フレームワークを使用して、C ++で基本的なSpace Invadersクローンを作成しました。終了後、約10個のスプライトと13MB相当のDLLがあることに気付きました。一部のプレイヤーはmingW DLLさえ持っていなかったため、ゲームが非常に混乱していました。 ゲームにデータを簡単に追加したり削除したりできるようにすべてのリソースをパックし、リソースのサイズを縮小して、基本的に1つの場所に配置するにはどうすればよいですか?コードブロックを使用しています。
10 c++  assets 

1
現在のgenコンソールまたはハンドヘルドコンパイラのいずれかがC ++ 11をサポートしていますか?
私は完全なサポートを求めていませんが、現在のジェネレーションはC ++ 11をサポートしていますか?VS C ++がラムダとautoキーワードをサポートしていることを知っています。また、gccも両方をサポートしていると思います。現在の世代のコンソールまたはハンドヘルド(3ds、sony vita)のいずれかがそれをサポートしていますか?
10 c++ 

2
いつC ++を使用し、いつブループリントを使用するのですか?
アンリアルエンジンの使い方を学ぼうとしています。C ++の基本的な知識があります。最近、私はサバイバルホラーゲームを、学習体験のためだけにやっているプロジェクトとして作り始めました。これまでのところ、私はすべての機能をブループリントシステムを通じて実装しました。 それで、私の質問は、Unreal Engineでゲームを改善/作成するためにコードをいつ、どのように使用するかです。
10 c++  unreal-4 

3
C ++でのエンティティコンポーネントシステム間のリンクに関するアドバイス
エンティティコンポーネントシステムに関するいくつかのドキュメントを読んだ後、私は私のものを実装することにしました。これまでのところ、エンティティとシステムマネージャ(システム)を含むWorldクラス、コンポーネントをstd :: mapとして含むエンティティクラス、およびいくつかのシステムがあります。エンティティをワールドのstd :: vectorとして保持しています。今のところ問題ありません。私を混乱させるのは、エンティティの反復です。それについて明確な心を持つことができないため、その部分を実装することはまだできません。すべてのシステムが、関心のあるエンティティのローカルリストを保持する必要がありますか?または、Worldクラスのエンティティを反復処理し、ネストされたループを作成してシステムを反復処理し、エンティティがシステムに関係するコンポーネントを持っているかどうかを確認する必要がありますか?というのは : for (entity x : listofentities) { for (system y : listofsystems) { if ((x.componentBitmask & y.bitmask) == y.bitmask) y.update(x, deltatime) } } しかし、ビットマスクシステムは、スクリプト言語を組み込む場合の柔軟性をある程度ブロックすると思います。または、各システムのローカルリストがあると、クラスのメモリ使用量が増加します。私はひどく混乱しています。

2
エンジン部品間の相互作用を実装する方法は?
ゲームエンジンパーツ間の情報交換の実装方法について質問したい。 エンジンは、ロジック、データ、UI、グラフィックの4つの部分に分かれています。初めに私は旗を通してこの交換をしました。たとえば、新しいオブジェクトがデータに追加された場合、isNewオブジェクトのクラスのフラグはとして設定されtrueます。その後、エンジンのグラフィックス部分がこのフラグをチェックし、オブジェクトをゲームの世界に追加します。 ただし、このアプローチでは、さまざまな種類のオブジェクトのすべてのフラグを処理するために、多くのコードを記述する必要がありました。 イベントシステムを使用することを考えましたが、これが適切なソリューションになるかどうかを知るのに十分な経験がありません。 イベントシステムが唯一の適切なアプローチですか、それとも別のものを使用する必要がありますか? それが問題なら、私はグラフィックスエンジンとしてOgreを使用しています。
10 c++  architecture 

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