Есть отдельный класс Resources,в котором хранятся контейнеры:
map<string, sf::Texture> textures; map<string, sf::Sprite> sprites
и методы:
loadTexture(path) - создает Texture
void Resources::loadTexture(std::string path)
{
if (textures.find(path) == textures.end())
{
sf::Texture texture;
texture.loadFromFile(path);
//texture.setRepeated(true);
textures.emplace(path, texture);
}
}
loadSprite(path, sf::IntRect rect) - если нет спрайта, создает спрайт, перед этим вызвав loadTexture(path) и вернув итератор на него, если есть просто возращает итератор
std::map<std::string, sf::Sprite>::iterator Resources::loadSprite(std::string path, sf::IntRect rect)
{
if (sprites.find(path) == sprites.end())
{
loadTexture(path);
sprites.emplace(path, sf::Sprite(textures.find(path)->second));
sprites[path].setTextureRect(rect);
sprites[path].setPosition(0, 0);
}
return sprites.find(path);
}
В классе Field, есть итератор которому присваивается loadSprite в конструкторе.
this->sprite_iterator = resources.loadSprite("images/tiles.png", sf::IntRect(0, 0, 25, 25));
Но при отладке выдает исключение либо в loadTexture, либо во время выполнения метода draw
void Field::draw_field(sf::RenderTarget& target)
{
for (int i = 0; i < this->fieldSize_x; i++)
for (int j = 0; j < this->fieldSize_y; j++)
{
(*sprite_iterator).second.setTextureRect(sf::IntRect(displayGrid[i][j] * 25, 0, 25, 25));
(*sprite_iterator).second.setPosition(((i * 25) + (700 / 4)), (j * 25) + 50);
target.draw((*sprite_iterator).second);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
у меня есть форма, которая дает возможность добавить и удалить строчкиПри нажатии кнопки отправить, надо собрать все значения, которые пользователь...