Изображение маркера не отображается в SFML - PullRequest
0 голосов
/ 25 сентября 2019

У меня проблемы с отображением изображения при стрельбе пулей.Он появляется на экране, но не отображает изображение, которое я ему установил, только сплошной белый цвет.Объект маркера сохраняется в векторе при его создании.

std::vector<Bullet> bullets;

При обработке события при нажатии клавиши пробела создается новый объект маркера и сохраняется в векторе.

if (event.key.code == sf::Keyboard::Space) {
        Bullet bullet(mWindow, player.getPosition(), sf::Mouse());
        bullets.push_back(bullet);

В методе рендеринга я использовал цикл для отображения каждого объекта в векторе.

mWindow.clear();
for (std::vector<Bullet>::iterator i = bullets.begin(); i < bullets.end(); i++) {
    mWindow.draw(*i);
}
mWindow.display();

Я не знаю, почему пуля выглядит как квадрат белого цвета, хотя я и сделала этото же самое с объектом игрока, и он работает нормально.Я сделаю код максимально коротким.Как видите, класс bullet наследует класс Sprite.В то время как класс Sprite наследует sf :: Sprite.Класс Sprite нуждается в одном параметре, который является местоположением для изображения пули.

class Sprite: public sf::Sprite {
    private:
        void loadFile (sf::Image &img, const std::string fileLocation) {
            if (!img.loadFromFile(fileLocation)) {
                std::cout << "Error loading image!" << std::endl;
            }
            return;
        }
    public:
        sf::Image image;
        sf::Texture texture;
    public:
        Sprite (const std::string fileLocation) {
            loadFile(image, fileLocation);
            image.createMaskFromColor(sf::Color(255, 255 , 255), 0);
            texture.loadFromImage(image);
            setTexture(texture);
            setOrigin(texture.getSize().x/2.0f, texture.getSize().y/2.0f);
        }
};
class Bullet: public Sprite {
    public:
        Bullet (sf::RenderWindow& window, const sf::Vector2f& position, sf::Mouse mouse): Sprite("img/bullet.png") {
            setPosition(position.x, position.y);
            shoot(window, position, mouse);
        }
};

В общем коде нет ошибок, поэтому он работает нормально, но изображение, которое я хотел поместитьв класс пули не появляется, просто чистый квадрат с белым цветом.

Изображение пули

Вот скриншоты программы:

Стреляет одиночной пулей

Стреляет несколько пуль

...