Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.1] Problem z sf::Texture w std::vector

Ostatnio zmodyfikowano 2014-06-27 08:47
Autor Wiadomość
kryCHa
Temat założony przez niniejszego użytkownika
[SFML 2.1] Problem z sf::Texture w std::vector
» 2014-06-26 22:21:25
Witam!

Przejdę od razu do rzeczy. Tworzę sobie funkcję w której wczytuje obrazki do tablicy std::vector imageArray.
C/C++
void ImageManager::addImage( std::string fileName )
{
    sf::Texture tmpTexture;
    tmpTexture.loadFromFile( fileName );
    imageArray.push_back( tmpTexture );
}

Następnie dodaję obrazek i przypisuję go do sprajta(Tak wiem głupi brzmi ;P) w konstruktorze klasy Game.

C/C++
Game::Game( int screenWidth_, int screenHeight_, std::string title_, bool fulllScreen_ )
{
    this->screenWidth = screenWidth_;
    this->screenHeight = screenHeight_;
   
    if( fulllScreen_ )
         app = new sf::RenderWindow( sf::VideoMode( screenWidth, screenHeight ), title_, sf::Style::Fullscreen );
    else
         app = new sf::RenderWindow( sf::VideoMode( screenWidth, screenHeight ), title_ );
   
    app->setVerticalSyncEnabled( true );
   
    ImageManager::getImageManager().addImage( "Character.png" );
    sprite.setTexture( ImageManager::getImageManager().getImage( 0 ) ); // Test
}

Potem funkcja render() wyświetla obrazek.

C/C++
void Game::render()
{
    app->clear();
    app->draw( sprite );
    app->display();
}


Mianowicie chodzi o to, że zamiast obrazka wyświetla się tylko białe tło.

Używam biblioteki SFML 2.1
P-112822
Glazus
» 2014-06-26 22:44:13
http://cpp0x.pl/forum/temat/​?id=6840

Tutaj powinieneś znaleźć odpowiedź na swoje pytanie.
P-112824
kryCHa
Temat założony przez niniejszego użytkownika
» 2014-06-26 22:49:48
Thx ;>

Zmieniłem
std::vector < sf::Texture > imageArray
 na
std::vector < sf::Texture *> imageArray

Pozostało mi tylko jedno pytanie. Dlaczego to działa a poprzednie nie ?
P-112826
pekfos
» 2014-06-26 22:57:03
Bo sprajt trzyma tylko wskaźnik na obraz, a vector<> przemieszcza obiekty w pamięci.
P-112827
kryCHa
Temat założony przez niniejszego użytkownika
» 2014-06-27 00:56:31
Dzięki.

Wiem. Jeden wątek = jeden problem. Ale teoretycznie można to pod to podpiąć ;P

C/C++
ImageManager::~ImageManager()
{
    for( unsigned int i = 0; i < imageArray.size(); i++ )
         delete imageArray[ i ];
   
    imageArray.clear();
}

Jak widać zwalniam pamięć. I wszystko jest niby ok. Ale jak kliknę "X" na wyrenderowanym oknie to wyskakuje mi -

Debug Assertion Failed!

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)


Wie ktoś o co chodzi?
P-112834
maly
» 2014-06-27 07:24:51
Usuwasz coś co zostało wcześniej usunięte.
P-112835
kryCHa
Temat założony przez niniejszego użytkownika
» 2014-06-27 08:47:23
A faktycznie. Thx za pomoc.

Close.
P-112836
« 1 »
  Strona 1 z 1