私は弾丸地獄の試合をしました。すべてが意図どおりに機能します。私は決してゲームデザインコースなどを持っていないので、私はコードについて懸念しています(品質賢明さとデザインは賢明です)。プレイヤー、敵と弾丸インタラクション(ゲームデザイン)
私がしていることは、すべてのオブジェクトを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:敵が撃つときに、新しい弾を敵の弾丸のベクトルに追加する必要があります。それらは分離する必要があります。つまり、プレイヤーの弾と敵が自分のコンテナを持っていることを意味します。衝突をチェックするときに反復する方が簡単です。あなたの敵から来た弾丸がプレイヤーと接触すると、適切なことが起こり、その結果、バレットはベクターから削除されなければなりません。このようにゲームプレイは3つのフェーズで構成され、オブジェクトの移動、衝突の撮影と確認を意味します。 – MJey