[SFML 2.0] Nie wyświetla obiektów
Ostatnio zmodyfikowano 2013-07-12 21:39
kubawal Temat założony przez niniejszego użytkownika |
[SFML 2.0] Nie wyświetla obiektów » 2013-07-12 20:58:22 Witam! Mam grę w której jest wiele obiektów, są przechowywane w wektorze (tak, to ta sama gra co z tematu [C++] [SFML 2.0] Range_error). Jednak problem jest taki, że od samego początku się nie wyświetlają (są tylko wyświetlane takie białe puste kwadraciki o rozmiarach takich samych jak ich tekstury) Oto kod: Objects.h: struct Object { Sprite sp; Vector2f pos; Object( string filename, Vector2f p ); void Do(); void Draw( RenderWindow & win ); private: Texture tex; };
struct Map { vector < Object > objs; void Draw( RenderWindow & win ); private: void Objects(); };
Objects.cpp: Object::Object( string filename, Vector2f p ) { if( !tex.loadFromFile( graphfile ) ) error( "Error with loading graph file " + graphfile ); sp.setTexture( tex ); pos = p; }
void Object::Do() { sp.setPosition( pos ); }
void Object::Draw( RenderWindow & win ) { win.draw( sp ); }
void Map::Draw( RenderWindow & win ) { for( int i = 0; i < objs.size(); i++ ) objs[ i ].Draw( win ); }
void Map::Objects() { if( objs.size() < MAX_OBJS && randint( 0, 100 ) == 0 ) objs.push_back( Object( RandObjectFileName(), RandObjectPos() ) ); for( int i = 0; i < objs.size(); i++ ) { if( objs[ i ].pos.x > w ) objs.erase( objs.begin() + i ); else { objs[ i ].pos.x += speed; objs[ i ].Do(); } } }
Ja tu żadnych błędów nie widzę. WTF? |
|
Monika90 |
» 2013-07-12 21:22:16 vector kopiuje przechowywane obiekty. Przeczytaj w dokumentacji jak zachowują się obiekty typu Texture, czy Sprite podczas kopiowania.
EDIT: Prawdopodobnie Sprite przechowuje referencję do tekstury, która po skopiowaniu obiektu do vectora przestaje istnieć. Czyli, musisz napisać konstruktor kopiujący i operator przypisania dla klasy Object. Albo używać wektora wskaźników. |
|
kubawal Temat założony przez niniejszego użytkownika |
» 2013-07-12 21:39:28 Ok, najprościej będzie zrobić vectora z Objectami alokowanymi dynamicznie. Wymaga to jedynie małych zmian w istniejącym kodzie i dodania destruktora do klasy Map, który będzie usuwał wszystkie Objecty, jakie zostały w vecotrze.
|
|
« 1 » |