[C++][SDL]Konstruktor - program nie uruchamia się

Odpowiedz Nowy wątek
2014-12-26 13:17
Pajacroku
0

Witam serdecznie,

Tworzę gierkę z użyciem biblioteki SDL. Śmigało wszystko jak należy, klasa z bohaterem(tzn. samolotem) działała jednak bez konstruktora(tzn. z konstruktorem domyślnym, bo i tak kompilator tworzy konstruktor). Dodałem go do klasy, program się skompilował, ale już się nie uruchamił. Zastanawiam się więc, gdzie jest błąd.

class ludek
{
    float predkosc;
    int acc;
    bool Act[7];
    pocisk bullet[7];
    float x;
    float y;
    SDL_Surface * image = NULL;
    SDL_Event event;
    SDL_Rect position;
    SDL_Rect scale;
    SDL_Surface *load_image( std::string filename );
public:
    ludek(float p, int a);
    void blit(SDL_Surface * ekran);
    void zaladuj();
    void ruch(Uint8 * keystate);
    void free();
    void colorkey();
    SDL_Rect scReturn();
    SDL_Rect posReturn();
    bool* actReturn();
    void actChange(int);
    void shoot(SDL_Surface * ekran);
 
};
ludek::ludek(float p, int a)
{
    this->predkosc = p;
    this->acc = a;
    this->zaladuj();
    this->colorkey();
    for(int i = 0; i <= 7; i++)
        Act[i] = false;
}

I metody użyte w konstruktorze:

void ludek::zaladuj()
{
    image = load_image("hello.png");
position.y = 768-32;
position.x = 1;
scale.x = 0;
scale.y = 0;
scale.h = 32;
scale.w = 32;
}
void ludek::colorkey()
{
    Uint32 colorkey = SDL_MapRGB(image->format,255,0,255);
    SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey);
}

I wywołanie konstruktora:

ludek ja(5,7);

Ogółem wygląda to tak, że jeśli konstruktor zostawię pusty, wartości pól ustalę poza nim i użyję powyższych metod w innym miejscu, to program się uruchomi i działa tak jak bym chciał, żeby działał, ale gdy go dodam, to program się kompiluje, ale nie uruchamia. Oczywiście można powiedzieć "skoro działa bez konstruktora, to z niego nie korzystaj", niestety to jest na projekt i wymagane jest, żeby klasy miały konstruktory. Uruchamianie programu poprzez .exeka też nic nie daje.

Moje środowisko programistyczne to Code::Blocks 13.12

Pozostało 580 znaków

2014-12-26 15:32
0
 
for(int i = 0; i <= 7; i++)
        Act[i] = false;

Wychodzisz poza zakres tablicy.

Pozostało 580 znaków

2014-12-26 21:24
0

Użyj lepiej vectorów z STL-a -> http://cpp0x.pl/dokumentacja/standard-C++/vector/819 . I zdecyduj się na jeda konwencję nazw, bo potem się pogubisz("pocisk bullet").

Pozostało 580 znaków

2014-12-27 12:38
Pajacroku
0

Poradziłem sobie z problemem, konstruktor wywołany był w złym miejscu. Dzięki wielkie za pomoc

@up
Dzięki za poradę : )

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0