[C++][Allegro 5] Problemy ze zmienną statyczną.
Ostatnio zmodyfikowano 2014-07-28 19:55
Monika90 |
» 2014-07-28 16:14:43 chodziło o to że masz zastąpić wszystkie odwołania do BlokTekstura funkcją zwracającą teksturę |
|
frogi16 Temat założony przez niniejszego użytkownika |
» 2014-07-28 16:15:23 (W main) for( int b = 0; b < IloscBlokowKolidujacych; b++ ) { TablicaWskBlokKolidujacy[ b ]->RysujSie(); } #ifndef BLOKKOLIDUJACY_H #define BLOKKOLIDUJACY_H #include <allegro5/allegro.h> #include <allegro5/allegro_image.h>
class BlokKolidujacy { public: static ALLEGRO_BITMAP * BlokTekstura; BlokKolidujacy( int PoczatkowyX, int PoczatkowyY ); ~BlokKolidujacy(); void RysujSie(); protected: private: ALLEGRO_BITMAP * Tekstura() const; int x; int y; };
#endif
#include "BlokKolidujacy.h" #include <allegro5/allegro.h> #include <allegro5/allegro_image.h>
BlokKolidujacy::BlokKolidujacy( int PoczatkowyX, int PoczatkowyY ) { x = PoczatkowyX; y = PoczatkowyY; }
BlokKolidujacy::~BlokKolidujacy() { }
void BlokKolidujacy::RysujSie() { al_draw_bitmap( BlokTekstura, x, y, 0 ); }
ALLEGRO_BITMAP * BlokKolidujacy::Tekstura() const { static ALLEGRO_BITMAP * BlokTekstura = al_load_bitmap( "Bloczek.png" ); return BlokTekstura; }
|
|
Monika90 |
» 2014-07-28 16:18:17 zamiast al_draw_bitmap( BlokTekstura, x, y, 0 ); daj al_draw_bitmap( Tekstura(), x, y, 0 ); |
|
pekfos |
» 2014-07-28 16:20:46 static ALLEGRO_BITMAP * BlokTekstura;
|
..i to wywal. O ile chcesz robić to na funkcjach, na samej zmiennej też się da i pisałem jak. |
|
frogi16 Temat założony przez niniejszego użytkownika |
» 2014-07-28 16:30:44 Chyba rozumiem, zamiast odnosić się do zmiennej mam się odnosić do funkcji zwracającej tą zmienną. Ale za to mam ciemny ekran w aplikacji i nic nie działa, nawet esc normalnie wyłączający aplikację. Nie wiem czym to jest spowodowane, może po prostu zrobię to łatwiej, zmienna nie będzie statyczna i po prostu będzie się przypisywała do niej tekstura w konstruktorze. Będzie łatwiej. |
|
pekfos |
» 2014-07-28 19:55:55 Nie prościej jak mówiłem..? class ABC { public: static bitmapa * texture; private: static bitmapa * texture2; public: static void loadTexture( const char * tex ) { texture2 = load_texture( tex ); } };
bitmapa * ABC::texture; bitmapa * ABC::texture2;
int main() { ABC::texture = load_texture( "abc.123" ); ABC::loadTexture( "abc.123" ); } Nazwy się ofc nie zgadzają. Wskaźniki na tekstury przed załadowaniem są wyzerowane, więc uważaj na to. |
|
1 « 2 » |