2016-07-29 288 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

相關問題