C#でビデオゲームを設計しているときに、この質問に出会いました。
BattlefieldやCall of Dutyなどのゲームを考慮すると、数百または数千の弾丸が同時に飛んでいます。イベントは絶えずトリガーされますが、私が知っている限りでは、これは処理能力を大量に消費します。さまざまなゲーム開発者が(2Dおよび3D)箇条書きをどのように管理し、それぞれにとって最も効率的な方法は何かを知りたいです。
私は質問読ん弾丸はビデオゲームでシミュレートされているどのように?ただし、プログラムの設計の観点からは、箇条書きがどのように機能するかについては触れません。
いくつかのアイデアがありましたが、それぞれに欠点があります。
私が考えることができる最も効率的な方法(2Dゲームの場合):
Bulletと呼ばれるクラスを作成し、ユーザーがボタンを長押ししても、0.01秒ごとにBulletオブジェクトが作成されるとします。この箇条書きの内容:
1速度
2ショットの開始位置
3スプライトテクスチャ
4ヒットエフェクト
箇条書きは独自のクラスになるため、描画、移動、およびアクションリスナー自体を管理できます。
インスタンス化されたこれらのオブジェクトの数千個を処理してから破棄するのは、プロセッサ上で難しいのではないでしょうか?RAMスペース?
3Dゲームの効率的な方法-私が考えていたもう1つの考えは:
武器クラスを作成するとしましょう。この武器にはさまざまな機能があり、そのうちのいくつかは次のとおりです。
1武器の照準を検出し、ターゲットを見ているかどうかを判断します
2銃撃のアニメーションをトリガーする
3 doDamage()メソッドがあります。これは、銃が向けられているものからヘルスを差し引くものを示します
4ボタンが押されたときに弾丸アニメーションクラスに通知する
次に、BulletAnimationなどの静的クラスを作成して、それがトリガーされた銃の場所、その銃が向けられている場所(弾丸の宛先)、および弾丸に使用する適切なスプライトと速度に関する情報を取得できます。次に、このクラスは、位置と目的のスプライトの両方に基づいてスプライトを描画し(おそらく新しいスレッドにidk)、銃から発射される弾丸をシミュレートします。
後者はコーディングがはるかに難しいようで、一度に何千もの弾丸に対してこれを行うために静的関数を絶えず呼び出すには、多くの処理能力が必要ではないでしょうか?開始位置と終了位置の両方で絶えず更新を取得することも困難です。
私の質問は、ゲームクリエーターが最も効率的に行う方法は何ですか?この方法は2Dゲームから3Dゲームに変わりますか?
pew-pew-pew
テクノロジーを介して機能します:)