Noobie在这里。我试图在多个类中对Player
对象mainCharacter
进行更改。我目前有一个Player
对象声明如下所示。 Player
能够传送到各种世界并与怪物战斗。
所有代码都有效。一旦一个世界的敌人被击败,他们就会被击败。我的问题是当他传送到另一个世界时,Player
的统计数据都被重置为默认值;即使在前世界遭受敌人的伤害之后,他仍然拥有完整的生命值。
如何跨多个类或世界对同一个Player
对象进行更改?我认为我的申报中存在问题,但我不确定。我很感激任何意见。谢谢!
声明mainCharacter
对象的位置:
class SpaceList
{
protected:
class SpaceNode
{
friend class SpaceList;
Player mainCharacter;
Space* thisSpace;
SpaceNode* next;
SpaceNode(int m, SpaceNode* next1 = NULL)
{
if(m == 0)
{
thisSpace = new EntranceHall(&mainCharacter);
}
else if(m == 1)
{
thisSpace = new WaterSpace(&mainCharacter);
}
Player.hpp
的一部分:
class Player: public Interactable
{
protected:
Backpack myBackpack;
public:
Player();
virtual interactableType getInteractableType();
virtual int interact();
virtual int attack();
virtual void defend(int);
Player.cpp
的一部分:
Player::Player()
{
healthPoints = 10;
numberOfAttackDice = 1;
sidesOfAttackDice = 6;
numberOfDefendDice = 1;
sidesOfDefendDice = 6;
}
mainCharacter
从Entrance
(Entrance.cpp
)开始:
EntranceHall::EntranceHall(Interactable* mainCharacter)
{
interactableGrid[6][3] = mainCharacter;
interactableGrid[0][3] = new Portal(0);//entrance portal
interactableGrid[3][3] = new InterestPoint(0);//stone mural
}
mainCharacter
可能会传送到水世界,默认值重置(Waterspace.cpp
):
WaterSpace::WaterSpace(Interactable* mainCharacter)
{
interactableGrid[3][0] = mainCharacter;
interactableGrid[3][3] = new Boss(this->getSpaceType());
答案 0 :(得分:6)
删除SpaceNode
和Player
之间的has-a关系 - 在外面某处创建Player
的实例并使用指针来引用它,就像您习惯的那样。或者只是将其设为static
,以便只有一个实例不会被重建(或者为每个SpaceNode
单独构建)。
注意:
不要自己实现链表,这个数据结构甚至不适合这里。试试std::vector
。
更好地切换到智能指针。你甚至可能在不知情的情况下泄露记忆。