【发布时间】:2016-07-29 18:48:00
【问题描述】:
这里是菜鸟。我正在尝试跨多个类更改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());
【问题讨论】:
-
mainCharacter是在哪里创建的?听起来它每次都会创建新的,这会给你一个新的“播放器”实例。相反,您似乎想创建一个播放器并继续使用它的实例。 -
@SteveFrancisco 这正是我想做的。我在 spacelist.hpp 中创建了它,我以为我将相同的 Player 发送到 EntranceHall 和 WaterSpace 等,认为如果对 EntranceHall 中的 Player 进行更改,它将反映在 WaterSpace 中,但事实并非如此。
-
下面的答案有正确的想法。每次创建空间节点时都会默认实例化空间节点中的 mainCharacter。您可能希望创建一次 Player 对象,然后通过 SpaceNode 方法或作为构造函数的参数将其传递给各个空间。