如何区分向量中的字符? SFML 2.4.1

How can I distinguish my characters in a vector? SFML 2.4.1

我正在使用 push_back 添加相同的角色,出于某种原因,这些角色一直都具有相同的统计数据。

Battle.cpp:

void Battle::InitalizeUser() 
{

    user.t_Pokemon.clear();
    user.t_Item.clear();

    user.currentPokemon_U = 0;

    user.t_Pokemon.push_back(&uF1);
    user.t_Pokemon.push_back(&uF1);
    user.t_Pokemon.push_back(&uW3);
    user.t_Pokemon.push_back(&uW3);
    user.t_Pokemon.push_back(&uG5);
    user.t_Pokemon.push_back(&uG5);

    user.t_Item.push_back(&uI1);
    user.t_Item.push_back(&uI2);

    for (unsigned int i = 0; i < user.t_Pokemon.size(); i++)
    {
        user.t_Pokemon.at(i)->poke_health = 100;
        user.t_Pokemon.at(i)->poke_isFainted = false;
    }

    assert(user.t_Pokemon.size() == 6);

    assert(user.t_Item.size() == 2);
}

所以如果 uF1 生命值降低,所有 uF1 角色都会受到相同的降低,但我不希望所有其他 uF1 受到降低,我希望能够区分它们并且只有一个特定角色受到影响.

我该怎么做?

Pokemon.cpp:

void Pokemon::attackNormal(Pokemon * opponentPokemon)
{

    opponentPokemon->poke_health = opponentPokemon->poke_health - 20;
    opponentPokemon->changeIfFainted();

    assert(opponentPokemon->poke_health <= 100 && opponentPokemon->poke_health >= 0);

}

Battle.h:

class Battle

{ 私人:

static Trainer user;
static Trainer ash;


static IntRect user_Rect;
static IntRect ash_Rect;

// User's pokemon
static Fire uF1;
static Water uW3;
static Grass uG5;
static Item uI1;
static Item uI2;

}

uF1 : Pokemon.h

   class Fire : public Pokemon 

{

public:
 Fire(); 
 Fire(string name); 
 virtual ~Fire();
void specialAttack(Pokemon * opponentPokemon);
void changeWeather();
void Draw(RenderWindow &window);

};

问题是您的向量包含指针的副本,这不等同于拥有实际对象的不同副本。

您似乎多次传递相同的指针以实现对象复制,但事实并非如此。

您应该首先声明所有对象,然后将它们的地址添加到向量中。

附加说明:您不必为使用的每个对象都创建一个变量。您还可以创建一个对象数组。