Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

obiekty allegro

Ostatnio zmodyfikowano 2009-04-11 14:15
Autor Wiadomość
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:
C/C++
#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 ]; ) {
        //void klawisz();
    }
    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:
C/C++
//---
postac * gracz;
//---
void init() {
    gracz = new postac( 10, 300, 5, 0, load_bmp( "grafika/gracz.bmp", default_palette ) );
    gracz.wyswietl();
}
//---
P-5482
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.

P-5483
steckel
Temat założony przez niniejszego użytkownika
» 2009-04-11 14:15:09
Dzięki wielkie.
P-5487
« 1 »
  Strona 1 z 1