Haker123 Temat założony przez niniejszego użytkownika |
[Allegro 5] Obsluga myszki i klawiatury. Jak to polaczyc. » 2014-06-28 15:19:49 Witam. Mam problem ze synchronizowaniem sygnalu z klawiatury i myszki. Jak ruszam postacia za pomoca klawiatury to ekran odswieza sie z predkoscia 60 klatek na sekunde.Kiedy rusze myszka to animacja postaci poruszanej za pomoca klawiatury przyspiesza tak jakby odswiezanie bylo wieksze niz je ustawilem. Kiedy zatrzymam myszke to animacja postaci (z klawiatury) znowu jest taka jak ma byc. Nie wiem gdzie jest blad , dopiero zaczynam nauke z Allegro. Kod wyglada tak: #include <allegro5/allegro5.h> #include <allegro5/allegro_native_dialog.h> #include <allegro5/allegro_image.h>
#define FPS 60 #define ScreenWidth 800 #define ScreenHeight 600
int main() { if( !al_init() ) { al_show_native_message_box( NULL, "ALLEGRO ERROR", "ERROR", "Allegro don't work", NULL, ALLEGRO_MESSAGEBOX_ERROR ); return - 1; } ALLEGRO_DISPLAY * display = al_create_display( ScreenWidth, ScreenHeight ); if( !display ) { al_show_native_message_box( display, "DISPLAY ERROR", "ERROR", "Display is not create", NULL, ALLEGRO_MESSAGEBOX_ERROR ); return - 1; } al_set_window_position( display, 100, 100 ); enum { DOWN, LEFT, RIGHT, UP }; float x = 0, y = 0, moveSpeed = 2; int x1 = 100, y1 = 200; bool active = false; bool done = false, draw = false; int dir = DOWN; int sourceX = 32, sourceY = 0; al_init_image_addon(); al_install_keyboard(); al_install_mouse(); ALLEGRO_KEYBOARD_STATE keyState; ALLEGRO_TIMER * timer = al_create_timer( 1.0 / FPS ); ALLEGRO_BITMAP * player = al_load_bitmap( "1.png" ); ALLEGRO_BITMAP * player2 = al_load_bitmap( "2.png" ); ALLEGRO_EVENT_QUEUE * event_queue = al_create_event_queue(); al_register_event_source( event_queue, al_get_mouse_event_source() ); al_register_event_source( event_queue, al_get_keyboard_event_source() ); al_register_event_source( event_queue, al_get_display_event_source( display ) ); al_register_event_source( event_queue, al_get_timer_event_source( timer ) ); al_hide_mouse_cursor( display ); al_start_timer( timer ); while( !done ) { ALLEGRO_EVENT events ; al_wait_for_event( event_queue, & events ); al_get_keyboard_state( & keyState ); if( events.type == ALLEGRO_EVENT_KEY_UP ) if( events.keyboard.keycode == ALLEGRO_KEY_ESCAPE ) done = true; if( events.type == ALLEGRO_EVENT_DISPLAY_CLOSE ) done = true; if( events.type == ALLEGRO_EVENT_MOUSE_AXES ) { x1 = events.mouse.x; y1 = events.mouse.y; } if( events.type = ALLEGRO_EVENT_TIMER ) { if( al_key_down( & keyState, ALLEGRO_KEY_DOWN ) ) { active = true; y += moveSpeed; dir = DOWN; if(( y + 32 ) > ScreenHeight ) y = ScreenHeight - 32; } if( al_key_down( & keyState, ALLEGRO_KEY_UP ) ) { active = true; y -= moveSpeed; dir = UP; if( y < 0 ) y = 0; } if( al_key_down( & keyState, ALLEGRO_KEY_LEFT ) ) { active = true; x -= moveSpeed; dir = LEFT; if( x < 0 ) x = 0; } if( al_key_down( & keyState, ALLEGRO_KEY_RIGHT ) ) { active = true; x += moveSpeed; dir = RIGHT; if(( x + 32 ) > ScreenWidth ) x = ScreenWidth - 32; } if( active ) sourceX += al_get_bitmap_width( player ) / 3; else sourceX = 32; if( sourceX >= al_get_bitmap_width( player ) ) sourceX = 0; draw = true; sourceY = dir; active = false; } if( draw ) { draw = false; al_draw_bitmap( player2, x1, y1, NULL ); al_draw_bitmap_region( player, sourceX, sourceY * al_get_bitmap_height( player ) / 4, 32, 32, x, y, NULL ); al_flip_display(); al_clear_to_color( al_map_rgb( 0, 0, 0 ) ); } } al_destroy_display( display ); al_destroy_bitmap( player ); al_destroy_bitmap( player2 ); al_destroy_timer( timer ); al_destroy_event_queue( event_queue ); return 0; }
|
|
pekfos |
» 2014-06-28 15:31:14 if( events.type = ALLEGRO_EVENT_TIMER )
|
|
|
Haker123 Temat założony przez niniejszego użytkownika |
» 2014-06-28 16:10:19 Niestety nie rozumiem.
Mam sprawdzanie czy zdarzenie pochodzi od czasu i w tym poruszam postacia za pomoca klawiatury.
Mam w tym wpisac obsluge eventu od myszki? |
|
pekfos |
» 2014-06-28 16:38:59 Tym gorzej dla ciebie, bo to błąd tak jasny i widoczny, że nie powinien być potrzebny żaden komentarz. |
|
Haker123 Temat założony przez niniejszego użytkownika |
» 2014-06-28 16:51:09 Teraz dopiero to widze ;]
Nie widzialem tego wczesniej bo myslalem o czyms innym, ale to i tak mnie nie usprawiedliwia ;]
Dzieki za pomoc teraz dziala wszystko jak trzeba. |
|
« 1 » |