キャラクターの当たり判定について
Posted: 2011年8月11日(木) 22:04
はじめまして。
こちらには初めて投稿させていただきます。
今、学校の課題でマリオ系の2Dのスクロールアクションゲームを作っています。
その中で、プレイヤーのキャラクターと敵キャラクターが衝突したら、敵キャラクターの生存フラグをFALSEに変更するという仕様があります。
当たり判定まではできたのですが、衝突したときに生存フラグを変更するところだけがうまくいかなくて困っています。
いろいろ試行錯誤してみたのですが、なかなかうまくいかないのでこちらで質問させていただきました。
ポインタの示しているアドレスがおかしい気がしていますが、どこがおかしいのでしょうか?
よろしくお願いいたします。
メイン
Player player;
EnemyManager enemyManager;
HitManager hitManager;
while (1) {
player.Update();
enemyManager.Update();
hitManager.CheckHitPlayerVsEnemy(player, enemyManager)
}
// 主人公
class Player {
public:
void Update() { キー操作や描画処理 }
}
// 敵キャラのクラス
class Enemy {
private:
bool isAlive;
public:
void SetIsAlive(bool alive) { isAlive = alive; }
}
// 敵キャラを扱うクラス
class EnemyManager {
private:
std::list<Enemy> enemies;
public:
void Update() { 敵キャラを生成してlistに入れたり、描画処理 }
std::list<Enemy> GetEnemies() { return enemies; }
}
// 当たり判定を行うクラス
class HitManager {
public:
void CheckHitPlayerVsEnemy(Player player, EnemyManager enemyManager);
}
void HitManager::CheckHitPlayerVsEnemy(Player player, EnemyManager enemyManager) {
std::list<Enemy> enemies = enemyManager.GetEnemies();
for (std::list<Enemy>::iterator it = enemies.begin();it != enemies.end();it++) {
Enemy* enemy = &*it;
if (主人公と敵キャラが当たっている) {
enemy.SetIsAlive(FALSE); // ここでenemyの生存フラグがFALSEになってほしいのに、変更されない
}
}
}
こちらには初めて投稿させていただきます。
今、学校の課題でマリオ系の2Dのスクロールアクションゲームを作っています。
その中で、プレイヤーのキャラクターと敵キャラクターが衝突したら、敵キャラクターの生存フラグをFALSEに変更するという仕様があります。
当たり判定まではできたのですが、衝突したときに生存フラグを変更するところだけがうまくいかなくて困っています。
いろいろ試行錯誤してみたのですが、なかなかうまくいかないのでこちらで質問させていただきました。
ポインタの示しているアドレスがおかしい気がしていますが、どこがおかしいのでしょうか?
よろしくお願いいたします。
メイン
Player player;
EnemyManager enemyManager;
HitManager hitManager;
while (1) {
player.Update();
enemyManager.Update();
hitManager.CheckHitPlayerVsEnemy(player, enemyManager)
}
// 主人公
class Player {
public:
void Update() { キー操作や描画処理 }
}
// 敵キャラのクラス
class Enemy {
private:
bool isAlive;
public:
void SetIsAlive(bool alive) { isAlive = alive; }
}
// 敵キャラを扱うクラス
class EnemyManager {
private:
std::list<Enemy> enemies;
public:
void Update() { 敵キャラを生成してlistに入れたり、描画処理 }
std::list<Enemy> GetEnemies() { return enemies; }
}
// 当たり判定を行うクラス
class HitManager {
public:
void CheckHitPlayerVsEnemy(Player player, EnemyManager enemyManager);
}
void HitManager::CheckHitPlayerVsEnemy(Player player, EnemyManager enemyManager) {
std::list<Enemy> enemies = enemyManager.GetEnemies();
for (std::list<Enemy>::iterator it = enemies.begin();it != enemies.end();it++) {
Enemy* enemy = &*it;
if (主人公と敵キャラが当たっている) {
enemy.SetIsAlive(FALSE); // ここでenemyの生存フラグがFALSEになってほしいのに、変更されない
}
}
}