如何在矢量中区分我的角色? SFML 2.4.1

时间:2017-02-04 20:02:37

标签: c++ sfml push-back

我使用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遭受减少,我希望能够区分它们并且只影响一个特定字符。 / p>

我该怎么做?

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);

};

1 个答案:

答案 0 :(得分:0)

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

似乎你要多次传递相同的指针才能实现对象复制,而不是这种情况。

首先应声明所有对象,然后将其地址添加到矢量中。

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