2016-07-29 182 views
3

Noobie在这里。我试图对多个类别的Player对象mainCharacter进行更改。我目前有一个Player对象声明如下所示。 Player能够传送到各种世界并与怪物战斗。C++如何跨多个类对同一对象进行更改?

所有这些代码的作品。一旦一个世界的敌人被击败,他们就会失败。我的问题是,当他传送到另一个世界时,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

部分 Player.cpp
class Player: public Interactable 
{ 
    protected: 
     Backpack myBackpack; 
    public: 
     Player(); 
     virtual interactableType getInteractableType(); 
     virtual int interact(); 
     virtual int attack(); 
     virtual void defend(int); 

mainCharacterEntrance开始了(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

'mainCharacter'创建在哪里?这听起来像是每次都会创建一个新的'Player'实例。相反,你似乎想创建一个玩家并继续使用它的实例。 –

+0

@SteveFrancisco那正是我想要做的。我在spacelist.hpp中创建了它,并且我认为我将同一个Player发送给了EntranceHall和WaterSpace等,认为如果在EntranceHall中对Player进行了更改,它将反映在WaterSpace中,但事实并非如此。 – anna

+1

下面的答案有正确的想法。每当创建空间节点时,空间节点中的mainCharacter都是默认实例化的。您可能需要创建一次您的Player对象,然后通过SpaceNode方法将其传递给单独的空间,或作为构造函数的参数传递给各个空间。 – DaveyLaser

回答

6

取出具有-一个SpaceNodePlayer之间的关系 - 之外的某处创建Player实例并使用指针来引用它,就像你习惯的那样。或者只是让它变成static,这样只有一个实例没有得到重建(或者对每个SpaceNode单独构建)。


注:

  • 不要自己实现链表,这个数据结构不适合,甚至在这里。尝试std::vector

  • 更好地切换到智能指针。你甚至可能在不知情的情况下泄漏记忆。

+0

我赞赏@LogicStuff的建议!谢谢! – anna

+0

@anna不客气。标记问题是通过接受答案来完成的,而不是编辑标题。 – LogicStuff

相关问题