У меня проблемы с отображением изображения при стрельбе пулей.Он появляется на экране, но не отображает изображение, которое я ему установил, только сплошной белый цвет.Объект маркера сохраняется в векторе при его создании.
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);
}
};
В общем коде нет ошибок, поэтому он работает нормально, но изображение, которое я хотел поместитьв класс пули не появляется, просто чистый квадрат с белым цветом.
Изображение пули
Вот скриншоты программы:
• Стреляет одиночной пулей
• Стреляет несколько пуль