我正在创建一个塔防游戏模型,敌人在被摧毁之前试图越过屏幕。
动态分配的Enemy对象的指针存储在EnemyManager类中的向量中,该类控制它们的产生和产生方式。当敌人的生命值达到零时,EnemyManager会使用delete
将其删除,并且还会erase
将指针删除。
我有一个BulletTower对象,该对象旨在锁定一个敌人并射击直到其被摧毁,然后再锁定另一个。这需要指向Enemy对象的指针,但是如果Enemy死亡并被EnemyManager删除,则该指针将悬空。
指针似乎无法告诉被锁定的敌人是否被摧毁。我研究了智能指针,但是鉴于敌人的生命值达到零时会手动删除它们,因此共享指针似乎无法工作。
答案 0 :(得分:1)
您可以将指向实际Enemy
对象的指针存储在变量中。并且有一个指向BulletTower
对象的指针变量的指针。当Enemy
被杀死时,EnemyManager
可以将变量更改为nullptr
,而BulletTower
对象可以通过其拥有的指针检查这一事实。
因此本质上,BulletTower
是锁定在指针变量上,而不是直接锁定在Enemy
对象上。
OR
保持计数BulletTower
个对象已锁定到Enemy
的数量。除非该计数变为0,否则不要删除Enemy
。对于BulletTower
,请在能量变为0时将锁取下,并减小锁计数。
答案 1 :(得分:0)
Weak pointer也许可以胜任。
此外,您可以提供一个函数或对象,该函数或对象可以返回当前锁定的敌人(如果还活着),或者返回一个新的对象。