2016-09-14 4 views
0

Я использую SFML 2.3 для создания игры, и у меня очень странная проблема. У меня есть два разных файла текстур, оба .png, но один из них отказывается рисоваться.Построение игры с SFML и текстурой отказывается рисовать

В любом случае я не получаю сообщение об ошибке. По какой-то причине TextureA работает и выглядит просто отлично, но TextureB не рисует.

Я убедился, что код верный, проверен на колпачки, у меня есть оба в одной папке и все пробовал. Я даже попытался ввести TextureA вместо TextureB и TextureA был нарисован просто отлично. Я думаю, проблема может быть в самом файле .png, но я не могу понять, что это такое.

Заранее благодарен!

+0

http://www.sfml-dev.org/tutorials/2.4/graphics-sprite.php –

+2

Отправьте свой код в вопрос. Минимальный пример - см. [SSCCE] (http://sscce.org/) –

+0

Пожалуйста, посмотрите на [mcve] (http://stackoverflow.com/help/mcve) –

ответ

2

Существует улов с текстурами и SFML. Sprites предполагает, что они не являются владельцем ресурса текстуры. Тем самым вы должны убедиться, что текстура все еще существует, когда вы пытаетесь провести рисование. Посмотрите на этот код здесь:

sf::Sprite makeSprite() { 
    sf::Texture tex; 
    tex.loadFromFile("someTexture.png"); 

    sf::Sprite sprite; 

    sprite.setTexture(tex); 

    // You indeed return the sprite, but tex is going out of scope here. 
    return sprite; 
} 

// further code will draw the sprite as a white square. 

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

+0

idk, но почему это сработало. Большое спасибо! – Zbadrawy

+2

@Zbadrawy Вы действительно хотите пойти, не зная, почему добавление работает? – user2296177