- 548 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 09:08:31 ID:mN9/jFMx]
- >>544
526のコードは、ポインタではなく実体で持たせているから、保障も何も要らんと思うが。 いずれにせよハンドルクラス (整数値とインスタンスの対応付け) は用意したほうが 便利だが、その場合でもプレイヤー・敵は別の ID 体系にしておくな。 たとえば、最大 2 プレイヤー同時プレイ可能なゲームで、プレイヤーに向かって 進む敵を作りたい場合。 class PlayerID { int id_; friend class Scene; }; class EnemyID { int id_; friend class Scene; }; class EnemyEnv { virtual ~EnemyEnv() {}; virtual PLAYER_ID GetNearestPlayer(ENEMY_ID enemy_id) const = 0; virtual Vec3 GetPlayerPos(PLAYER_ID player_id) const = 0; }; class Scene : public EnemyEnv { Player player_[2]; std:::list<Enemy> enemies_; public: void Update() { player_.Update(*this); enemy_.Update(*this); } virtual PLAYER_ID GetNearestPlayer() const { ... } virtual bool GetPlayerPos(PLAYER_ID player_id, Vec3* pos) const { // 実際には、ここで player_id.id の値チェックを行い、生存していなかったら false 返す *pos = player_[player_id.id_].GetPos(); return false; } } void Enemy::Update(EnemyEnv& env) { PLAYER_ID player_id = env.GetNearestPlayer(this.GetID()); Vec3 pos = env.GetPlayerPos(player_id); // あとは pos に向かって自分の位置を調整 }
|

|