Обновление объекта внутри вектора? - PullRequest
0 голосов
/ 26 мая 2020

Итак, я обновляю список векторов "Ракета". Однако когда я пытаюсь изменить координаты: x и y, они не изменятся? Я не понимаю почему, особенно когда все остальное внутри него обновляется?

    private:
std::vector<Missile> missiles;


    void shoot(Spawner spawn)
    {
        // 50.0f/3, 200.0f/3
        Missile missile = Missile(x + 90.5f, y, image.shader);
        missiles.push_back(missile);
    }
void update(GLFWwindow* window, Spawner spawn)
    {
        input(window, spawn);

        updatePosition(x, y);

        for (int i = 0; i < missiles.size(); i++)
        {
            Missile index = missiles.at(i);

            index.update();
        }
    }


// Inside the missile class:

public:
    Missile(float x, float y, Shader shader)
        : Sprite(x, y, 50.0f/3, 200.0f/3, shader, "res/Textures/Missile.png", 0.0f, 0.0f, 0.25f, 1.0f)
    {

    }

    void update()
    {
        x = 100.0f;

        updatePosition(x, y);
        std::cout << "Y: " << y << std::endl;
    }

    void render()
    {
        image.draw();
    }

1 Ответ

3 голосов
/ 26 мая 2020

В этой строке:

Missile index = missiles.at(i);

вы делаете копию из Missile, поэтому оригинал внутри вектора не изменяется.

Вместо этого , вы можете сделать:

Missile &index = missiles.at(i);

, чтобы взять ссылку на Missile в векторе.

Или просто:

missiles.at(i).update();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...