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

Problem z menu oraz deklaracja obiektów klas

Ostatnio zmodyfikowano 2013-03-27 17:35
Autor Wiadomość
fers334
Temat założony przez niniejszego użytkownika
Problem z menu oraz deklaracja obiektów klas
» 2013-03-23 10:40:25
Siemka mam pytanie czemu po wyświetleniu menu postać się szybciej przemieszcza przez pewien czas ?

KOD :

main.cpp

C/C++
#include <allegro.h>
#include "gra.h"
#include "bufor.h"

volatile int speed_fps = 0;
void incremented_speed()
{
    speed_fps++;
}

LOCK_VARIABLE( speed_fps );
LOCK_FUNCTION( incremented_speed );

int main()
{
    allegro_init();
   
    install_keyboard();
    install_mouse();
    install_timer();
    install_int_ex( incremented_speed, BPS_TO_TIMER( 150 ) );
   
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    clear_to_color( screen, makecol( 255, 255, 255 ) );
   
    bool koniec = false;
    buf.inicjuj_bufor();
    gra gierka;
   
    while( !gierka.koniec )
    {
        while( speed_fps > 0 )
        {
            gierka.rozgrywka();
            speed_fps--;
        }
    }
   
    allegro_exit();
    return 1;
}
END_OF_MAIN();

snake.h

C/C++
#include <allegro.h>
#include "bufor.h"

class snake
{
    int poz_x;
    int poz_y;
    int kierunek_ruchu;
    int liczba_pkt;
   
    BITMAP * waz;
   
public:
    snake()
        : poz_x( 400 )
        , poz_y( 300 )
        , waz( 0 )
        , kierunek_ruchu( 0 )
        , liczba_pkt( 0 )
    {
        waz = load_bitmap( "snake.bmp", default_palette );
    }
   
    void poruszanie();
    void rysuj_gracza();
    void rosniecie_snake();
};
void snake::poruszanie()
{
    if( key[ KEY_RIGHT ] )
    {
        kierunek_ruchu = 1;
    }
    else if( key[ KEY_LEFT ] )
    {
        kierunek_ruchu = 2;
    }
    else if( key[ KEY_UP ] )
    {
        kierunek_ruchu = 3;
    }
    else if( key[ KEY_DOWN ] )
    {
        kierunek_ruchu = 4;
    }
   
    rysuj_gracza();
}
void snake::rysuj_gracza()
{
    if( kierunek_ruchu == 1 )
    {
        poz_x++;
    }
    else if( kierunek_ruchu == 2 )
    {
        poz_x--;
    }
    else if( kierunek_ruchu == 3 )
    {
        poz_y--;
    }
    else if( kierunek_ruchu == 4 )
    {
        poz_y++;
    }
   
    masked_blit( waz, buf.screen_bufor, 0, 0, poz_x, poz_y, waz->w, waz->h );
    textprintf( buf.screen_bufor, font, 20, 20, - 1, " GRACZ : poz_x = %d , poz_y = %d ", poz_x, poz_y );
}
bufor.h
C/C++
#ifndef bufor_H
#define bufor_H
#include <allegro.h>


struct bufor
{
    BITMAP * screen_bufor;
   
    void inicjuj_bufor()
    {
        screen_bufor = create_bitmap( 800, 600 );
        czysc_bufor();
    }
    void czysc_bufor();
};
bufor buf;

void bufor::czysc_bufor()
{
    clear_to_color( screen_bufor, makecol( 255, 255, 255 ) );
}

#endif
gra.h
C/C++
#include <allegro.h>
#include "snake.h"
#include "bufor.h"
#include "menu.h"


class gra
{
private:
    snake boa;
    menu mnu;
   
public:
   
    gra()
        : koniec( 0 )
    { }
    void rozgrywka();
   
public:
    bool koniec;
};

void gra::rozgrywka()
{
    boa.poruszanie();
    blit( buf.screen_bufor, screen, 0, 0, 0, 0, 800, 600 );
    buf.czysc_bufor();
   
    if( key[ KEY_ESC ] )
    {
        koniec = mnu.wybierz_z_menu();
    }
}
menu.h
C/C++
#include <allegro.h>
#include "bufor.h"


class menu
{
private:
    BITMAP * mnu;
   
    void wyswietl_menu();
   
public:
    menu()
        : mnu( 0 )
    {
        mnu = load_bitmap( "menu.bmp", default_palette );
    }
   
    bool wybierz_z_menu();
};
bool menu::wybierz_z_menu()
{
    wyswietl_menu();
    while( 1 )
    {
        if( key[ KEY_1 ] )
        {
            return 0;
           
        }
        else if( key[ KEY_0 ] )
        {
            return 1;
        }
    }
}
void menu::wyswietl_menu()
{
    blit( mnu, buf.screen_bufor, 0, 0, 300, 200, mnu->w, mnu->h );
    blit( buf.screen_bufor, screen, 0, 0, 0, 0, 800, 600 );
}


Oraz mam jedno pytanie dlaczego gdy tworze obiekt klasy zaraz za jej definicja to jego konstruktor nie wczytuje
obrazka bmp i wyswietla mi sie błąd mam namysli np klase dane :
C/C++
class dane
{
    BITMAP * obraz;
public:
   
    dane()
    {
        obraz = load_bitmap( "dane.bmp", default_palette );
    }
    // funkcje skladowe itp.
   
};
dane dane_osobiste;

TO jesli zaraz za klasa stworze obiekt nie zadziala mi program natomiast jak zdeklaruje obiekt tej klasy wewnatrz innej klasy/funkcji all jest Okey. Wie ktos dlaczego ?
P-79187
fers334
Temat założony przez niniejszego użytkownika
» 2013-03-27 08:34:23
Rozwiązałem sprawę stworzylem nowa klase podobna do sdl_laduj_bmp i w niej wczytywalem menu.

P-79460
fers334
Temat założony przez niniejszego użytkownika
» 2013-03-27 17:35:32
<< removed - załóż osobny temat >>
P-79485
« 1 »
  Strona 1 z 1