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 #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 #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 #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 #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 #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 : class dane { BITMAP * obraz; public: dane() { obraz = load_bitmap( "dane.bmp", default_palette ); } }; 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 ? |