obiekty allegro
Ostatnio zmodyfikowano 2009-04-11 14:15
steckel Temat założony przez niniejszego użytkownika |
obiekty allegro » 2009-04-11 12:31:08 Nie wiem jak połączyć wskaźniki i obiekty: #include <allegro.h> #include <math.h> #include <string>
using namespace std;
BITMAP * tlo; BITMAP * bufor_postaci; double przyspieszenie = 2;
class postac { private: double m_pozycja_x; double m_pozycja_y; double m_szybkosc_x; double m_szybkosc_y; BITMAP * postac_graf; public: postac() { m_pozycja_x = 10; m_pozycja_y = 500; m_szybkosc_x = 0; m_szybkosc_y; postac_graf = create_bitmap( 50, 100 ); } postac( int p_x, int p_y, double s_x, double s_y, BITMAP * graf ) { m_pozycja_x = p_x; m_pozycja_y = p_y; m_szybkosc_x = s_x; m_szybkosc_y = s_x; postac_graf = graf; } int pozycja_x() { return int( m_pozycja_x ); } int pozycja_y() { return int( m_pozycja_y ); } int szybkosc_x() { return int( m_szybkosc_x ); } int szybkosc_y() { return int( m_szybkosc_y ); } void przyspiesz_p() { m_szybkosc_x += przyspieszenie; } void przyspiesz_l() { m_szybkosc_x -= przyspieszenie; } void zwolnij_x() { if( m_szybkosc_x > 0 ) m_szybkosc_x--; else if( m_szybkosc_x < 0 ) m_szybkosc_x++; } void aktualizuj() { m_pozycja_x += m_szybkosc_x; m_pozycja_y += m_szybkosc_y; } void wyswietl() { clear_to_color( bufor_postaci, makecol( 255, 0, 255 ) ); blit( postac_graf, bufor_postaci, 0, 0, 0, 0, postac_graf->w, postac_graf->h ); masked_blit( bufor_postaci, screen, 0, 0, int( m_pozycja_x ), int( m_pozycja_y ), postac_graf->w, postac_graf->h ); } };
void allegro(); void init(); void klawisz();
postac * gracz;
int main() { allegro(); init(); for(; !key[ KEY_ESC ]; ) { } return 0; } END_OF_MAIN()
void allegro() { allegro_init(); set_color_depth( 32 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); clear_to_color( screen, makecol( 255, 255, 255 ) ); install_timer(); install_keyboard(); install_mouse(); bufor_postaci = create_bitmap( 50, 100 ); }
void init() { gracz = new postac( 10, 300, 5, 0, load_bmp( "grafika/gracz.bmp", default_palette ) ); gracz.wyswietl(); }
void klawisz() { rest( 100 ); if( key[ KEY_RIGHT ] ) gracz.przyspiesz_p(); else if( key[ KEY_LEFT ] ) gracz.przyspiesz_l(); gracz.zwolnij_x(); }
Błędy: main.cpp: In function `void init()': main.cpp:83: error: `wyswietl' has not been declared main.cpp:83: error: request for member of non-aggregate type before '(' token
main.cpp: In function `void klawisz()': main.cpp:88: error: `przyspiesz_p' has not been declared main.cpp:88: error: request for member of non-aggregate type before '(' token main.cpp:89: error: `przyspiesz_l' has not been declared main.cpp:89: error: request for member of non-aggregate type before '(' token main.cpp:90: error: `zwolnij_x' has not been declared main.cpp:90: error: request for member of non-aggregate type before '(' token
make.exe: *** [main.o] Error 1
Szczególnie proszę zwrócić uwagę na to: postac * gracz;
void init() { gracz = new postac( 10, 300, 5, 0, load_bmp( "grafika/gracz.bmp", default_palette ) ); gracz.wyswietl(); }
|
|
DejaVu |
» 2009-04-11 12:59:22 Jeśli obiekt jest statyczny: gracz.wyswietl(); Jeśli obiekt jest alokowany dynamicznie: gracz->wyswietl(); można też się spotkać z takim zapisem: ( * gracz ).wyswietl(); Ostatniego zapisu jednak nie polecam i raczej należy korzystać. Warto jednak wiedzieć, że coś takiego istnieje. |
|
steckel Temat założony przez niniejszego użytkownika |
» 2009-04-11 14:15:09 Dzięki wielkie. |
|
« 1 » |