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