Отталкивание объекта обратно в std :: vector - PullRequest
0 голосов
/ 17 декабря 2018

Я пишу пули на C ++.Я не очень опытен в c ++.

Для моей системы маркеров я хочу иметь класс диспетчера маркеров, который обновляет и рисует все маркеры.У меня также есть класс с именем «Пуля», это хорошо, пуля.

class Bullet {
public:
    Bullet();

    sf::Sprite bullet_sprite;
    sf::Vector2f movement_vector;
    sf::Vector2f destination_pos;
    float speed;
};


class BulletManager : public Entity {
public:
    virtual void draw(sf::RenderWindow& window);
    virtual void update(sf::RenderWindow& window);

    std::vector<Bullet*> bullets;

};

Я храню каждую пулю в векторе.В функциях рисования и обновления я пробегаю этот вектор и выполняю необходимые операции с каждой маркером.

У меня возникают трудности с добавлением маркеров к вектору из моего класса player .Я пытаюсь передать ссылку на новую пулю следующим образом:

bullet_manager.bullets.push_back(&bullet);

Однако размер вектора bullets всегда остается равным нулю.

Какя могу добавить новые объекты маркера к этому вектору из класса проигрывателя?

Кроме того, у меня это есть в классе проигрывателя, так как он является частью функции обработки ввода игрока.

1 Ответ

0 голосов
/ 18 декабря 2018

попробуйте использовать std :: move ()

проверьте эту ссылку!

https://es.cppreference.com/w/cpp/utility/move

и проверьте этот пример по ссылке:

#include <iostream>
#include <utility>
#include <vector>
#include <string>
int main()
{
    std::string str = "Hello";
    std::vector<std::string> v;

    // uses the push_back(const T&) overload, which means 
    // we'll incur the cost of copying str
    v.push_back(str);
    std::cout << "After copy, str is \"" << str << "\"\n";

    // uses the rvalue reference push_back(T&&) overload, 
    // which means no strings will copied; instead, the contents
    // of str will be moved into the vector.  This is less
    // expensive, but also means str might now be empty.
    v.push_back(std::move(str));
    std::cout << "After move, str is \"" << str << "\"\n";

    std::cout << "The contents of the vector are \"" << v[0]
                                         << "\", \"" << v[1] << "\"\n";
}
...