bingo009 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Nie wyświetla obrazka, biały ekran » 2012-11-12 20:26:43 Witam was serdecznie, otóż piszę sobie tę grę, aby nauczyć się programować obiektowo, więc staram się aby ta gra była napisana obiektowo. Mianowicie, mam klasę Game, która dziedziczy od klasy RenderWindow. Teraz za pomocą klasy Object, która dziedziczy klasę Sprite próbuję narysować coś na ekranie. Tutaj metoda klasy Object: void Object::Draw() { Game::returnInstance().draw( * this ); }
Tutaj kod metody returnInstance() Game & Game::returnInstance() { static Game instance; return instance; }
Prototyp metody: static Game & returnInstance();
Z obiektu klasy Game próbuję wywołać to w ten sposób: void Game::Test() { test.Draw(); }
pomijam ładowanie zasobów, gdyż to wszystko jest w klasie Object i to nie to, bo sprawdzałem i ładuje się prawidłowo wszystko. Ale mimo wszystko w odpowiedzi dostaje pusty ekran, lecz komputer zaczyna głośniej chodzić, co jest znakiem, że coś się dzieje. Dopiero się uczę tych rzeczy związanych z klasami, kodu w 100% sam nie piszę, tylko sprawdzam jak to jest zrobione w innych takich grach i robię podobnie(nie tak samo) u siebie, więc pewnie popełniłem gdzieś błąd. |
|
DejaVu |
» 2012-11-12 20:40:40 |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-11-12 20:57:50 Dodam, że jak z klasy Game bezpośrednio próbuję narysować obiekt klasy Object, to wszystko jest wporządku. Dodam, że wcześniej miałem tak, że w klasie Object był zawarty Sprite, a sama klasa dziedziczyła po klasie RenderWindow i problem był ten sam. Rysowanie wyglądało tak samo, tylko, że zamiast this podstawiałem normalny Sprite. Jestem prawie pewny, że to coś z rysowaniem się psuje. Zrobiłem mały test. Utworzyłem testową klasę: class Test : public sf::Sprite { private: sf::Texture tex; public: Test( const char * tex2 ); void drawTest(); };
tutaj jej konstruktor i metoda: Test::Test( const char * tex2 ) { tex.loadFromFile( tex2 ); setTexture( tex ); }
void Test::drawTest() { Game::returnInstance().draw( * this ); }
ta klasa pokazuje w dużym uproszczeniu co jest w tej większej, w ten sposób właśnie robię. I efekt: to samo. Obrazek odrazu mówię, że napewno istnieje. Coś mi się zdaję, że chyba jest coś nie tak z tą instancją. |
|
DejaVu |
» 2012-11-12 21:10:43 Założę się, że trzymasz obiekty w kontenerze std::vector :) |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-11-12 21:13:55 Nie bardzo, tworzę obiekt klasy Game, a potem on zajmuje się grą, w nim jest tworzony obiekt klasy Test i próba wyświetlenia go. |
|
DejaVu |
» 2012-11-12 21:21:40 jak wygląda pełna deklaracja tej metody? |
|
bingo009 Temat założony przez niniejszego użytkownika |
» 2012-11-12 21:34:02 Ta metoda jest dziedziczona z klasy sf::RenderWindow. |
|
DejaVu |
» 2012-11-12 21:40:53 Lepiej pokaż cały kod od momentu utworzenia obiektu 'Test' do momentu jego wyświetlenia. Gdzieś na bank musi być tworzona kopia obiektu Test jeżeli twierdzisz, że teksturę udało się poprawnie wczytać. |
|
« 1 » 2 |