2017-07-17 9 views
2

私は弾丸地獄の試合をしました。すべてが意図どおりに機能します。私は決してゲームデザインコースなどを持っていないので、私はコードについて懸念しています(品質賢明さとデザインは賢明です)。プレイヤー、敵と弾丸インタラクション(ゲームデザイン)

私がしていることは、すべてのオブジェクトをGLOBAL VECTORSに保存することです(私はその悪いことを知っています)。このよう

EnemiesArrayが

bulletsArray //敵弾

playerBullets //プレイヤーの弾丸

、衝突のために私は

for (auto playerBullet : playerBullets) 
{ 
for(auto enemy : EnemyArray) 
    { 


     if(enemy->checkCollision(playerBullet->bulletSprite->getPosition())) 
     { 
      //collided 
     } 
    } 
} 

時に更新して衝突をチェックするマネージャを持っているとして、弾丸と敵との衝突があり、多くのことが起こります。例えば背景オブジェクトが移動し、PlayerはxpやHudの変更などを取得します。

Managerには、bg hudと必要なすべての情報が含まれています。

問題1:

グローバルベクトルを削除する方法を教えてください。 (私はコード内のどこからでも弾丸や敵を作ることができます)。

問題2: 箇条書きの衝突をチェックするマネージャが必要ですか?またはオブジェクト自体がそれをチェックする必要がありますか?もしそうなら、私はどのように弾に敵の参照を与えるのですか?

問題3: マネージャーは私が言及したようにあまりにも多くのオブジェクトを管理しています。 (申し訳ありませんが、私はここで馬鹿に思えます)。私はあるマネージャーが一種の仕事を管理しなければならないと聞いています。

答えて

1

私は過去数ヶ月で私自身のゲームを作りました。主な機能の1つは、プレイヤーに敵を撃墜させることでした。あなたの問題は私のものと非常に似ているようですので、私が自分のプロジェクトでどのように処理したか教えてください。

問題1:私のゲームはいくつかのレベルで構成されていました。すべてのレベルは、敵/ボーナスなどのための独自のコンテナを持つ別個のオブジェクトでした。レベルにクリーチャーを追加することができた唯一の場所は、レベルのコンストラクターでした。ただし、特定の状況下で動的に追加することは問題ではありません。要点は、特定のレベルを完了した後、私はそれに割り当てられたすべてのオブジェクトを取り除いたということです。その唯一のことは、プレーヤーと彼の得点に関する情報でした。

問題2:すべての動的イベントには、独自の衝突検出器が必要です。オブジェクトそのものはではなく、でそれを自分で調べることができます。私はむしろDetectorのような別のクラスを作成して、プレイヤーと敵/プレイヤーと弾/弾と敵の衝突をチェックする方法をいくつか定義します(1つの目的のために1つの方法)。レベルのコンテナをDetectorに渡すことで、特定の衝突に対して定義したアルゴリズムを実行して反復することができます。

問題3:マネージャーBulletManagerEnemiesManagerのために例えば、あなたのゲームデザインのすべての部分のためのインタフェース、する必要があります - それは、私はそれに対処する方法です。

私のソリューションが何らかの形で役に立つと願っています。

+0

問題1:私はレベルのオブジェクトを作成することができます。それから私は敵のためにすべてのオブジェクトを追加する必要があります。それは問題ありません。しかし、その後、敵が撃つ。 弾丸はどのようにレベルに追加されますか?すべての敵はレベルを見直していますか? –

+0

問題1:敵が撃つときに、新しい弾を敵の弾丸のベクトルに追加する必要があります。それらは分離する必要があります。つまり、プレイヤーの弾と敵が自分のコンテナを持っていることを意味します。衝突をチェックするときに反復する方が簡単です。あなたの敵から来た弾丸がプレイヤーと接触すると、適切なことが起こり、その結果、バレットはベクターから削除されなければなりません。このようにゲームプレイは3つのフェーズで構成され、オブジェクトの移動、衝突の撮影と確認を意味します。 – MJey

関連する問題