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);
:
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());
'mainCharacter'創建在哪裏?這聽起來像是每次都會創建一個新的'Player'實例。相反,你似乎想創建一個玩家並繼續使用它的實例。 –
@SteveFrancisco那正是我想要做的。我在spacelist.hpp中創建了它,並且我認爲我將同一個Player發送給了EntranceHall和WaterSpace等,認爲如果在EntranceHall中對Player進行了更改,它將反映在WaterSpace中,但事實並非如此。 – anna
下面的答案有正確的想法。每當創建空間節點時,空間節點中的mainCharacter都是默認實例化的。您可能需要創建一次您的Player對象,然後通過SpaceNode方法將其傳遞給單獨的空間,或作爲構造函數的參數傳遞給各個空間。 – DaveyLaser