brago Temat założony przez niniejszego użytkownika |
[SFML] Problem, prawdopodobnie, z kontenerem obiektów » 2012-04-12 17:25:00 witam, mam problem, chcę zrobić coś typu zwykłego rpg'a 2d, widok z góry. W każdym bądź razie, mam póki co coś co powinno mi wyświetlać mapę z pliku, problem polega na tym, że nie wyświetla się nic, a kompilator nie wyrzuca żadnych błędów. plik map.h: #include <vector> #include "object.h" #ifndef MAP_H_INCLUDED #define MAP_H_INCLUDED
class map { public: map( char * nazwa_pliku ); sf::Sprite display( int x, int y ); private: std::vector < object > objects; std::vector < sf::Texture > textures; sf::RenderTexture widok; sf::View view; };
#endif
object.h: #ifndef OBJECT_H_INCLUDED #define OBJECT_H_INCLUDED #include <SFML/Graphics.hpp>
class object { public: sf::Sprite sprite; int numer; };
#endif
map.cpp: #include "map.h" #include <SFML/Graphics.hpp> #include <string> #include <fstream> #include <iostream> #include "object.h" #include <vector>
map::map( char * nazwa_pliku ) { std::fstream plik; int x = 0, y = 0; plik.open( nazwa_pliku, std::ios::in ); if( plik.good() == true ) { std::string linia; getline( plik, linia ); sf::Texture obraz; do { try { obraz.loadFromFile( linia ); } catch(...) { std::cout << "blad odczytu pliku" << std::endl; } textures.push_back( obraz ); getline( plik, linia ); } while( linia != "##sprites" ); int i = 0; getline( plik, linia ); do { object obiekt; obiekt.numer = i; obiekt.sprite.setTexture( textures.at( atoi( linia.c_str() ) ) ); getline( plik, linia ); x = atoi( linia.c_str() ); getline( plik, linia ); y = atoi( linia.c_str() ); obiekt.sprite.setPosition( x, y ); getline( plik, linia ); i++; objects.push_back( obiekt ); } while( linia != "##end" ); plik.close(); widok.create( 960, 500 ); view.reset( sf::FloatRect( 0, 0, 960, 500 ) ); } };
sf::Sprite map::display( int x, int y ) { sf::Sprite wynik; view.setCenter( x, y ); widok.setView( view ); widok.clear( sf::Color::White ); for( int i = 0; i > objects.size(); i++ ) { widok.draw( objects.at( i ).sprite ); } widok.display(); wynik.setTexture( widok.getTexture() ); return wynik; }; mapa.map: jeden.jpg dwa.jpg kamien.jpg trzy.jpg ##sprites 0 120 120 0 220 120 1 234 234 2 532 765 3 300 500 ##end Będę wdzięczny za wszelkie sugestie, nie mam pojęcia o co może chodzić |
|
DejaVu |
» 2012-04-12 17:30:45 |
|
hincu |
» 2012-04-12 18:00:29 problem pewnie lezy we wczytywaniu pliku : P wczytaj sobie najpierw jeden kafelek jesli bedzie wyswietlal sie dobrze znaczy ze jest ok jesli nie to blad przy wczytywaniu z pliku, o ile sie orienuje to w sfml 2.0 jest grafika wczytywana do sf::texture z texture do image : P skorzystaj tez z opcji wyrzucania errorow podziel wszystko sobie na funkcje jesli wczyta prawidlowo zwroc true jesli zas nie to false i tresc bledu tak powinienes dojsc co do czego |
|
RazzorFlame |
» 2012-04-12 18:30:45 << Post removed by: DejaVu - jeden temat = jeden problem, a Twój post to ewidentnie nie nawiązywał do zgłoszenia >> |
|
brago Temat założony przez niniejszego użytkownika |
» 2012-04-13 17:54:22 okej, zamieniłem <sf::Texture> na <sf::Texture * > i musiałem coś jeszcze zmienić żeby działało, więc zrobiłem tak: do { sf::Texture obraz; try { obraz.loadFromFile( linia ); } catch(...) { std::cout << "blad odczytu pliku" << std::endl; } textures.push_back( & obraz ); getline( plik, linia ); } while( linia != "##sprites" );
dodałem sf::Sprite object::draw() gdzie jest setTexture i efekt ten sam, tzn pusto, zakładam, że nie zrozumiałem czegoś, bo od niedawna mam związek z wskaźnikami... |
|
DejaVu |
» 2012-04-13 20:38:07 No cóż... ewidentnie zrobiłeś to źle. Poczytaj o dynamicznej alokacji pamięci. |
|
brago Temat założony przez niniejszego użytkownika |
» 2012-04-14 06:59:29 no cóż, próbowałem robić to z new i delete, ale nie działało, nawet jeśli na sztywno coś wrzucę do display to nie działa, dałem nawet widok.clear(sf::Color::Red), ale widok jest dalej biały tak jak kiedyś to sobie tam ustaliłem... |
|
DejaVu |
» 2012-04-14 07:42:35 To może na początek weź najprostszy kod z tutoriala? Bo wynika z tego, że nie potrafisz poprawnie używać biblioteki SFML, a to z kolei wykracza poza zakres tego tematu. |
|
« 1 » |