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

[Allegro 5] Problem z menu

Ostatnio zmodyfikowano 2013-03-24 14:59
Autor Wiadomość
matiasz
Temat założony przez niniejszego użytkownika
[Allegro 5] Problem z menu
» 2013-03-23 16:35:40
Witam!
Zrobiłem proste menu ,ale mam z nim problem. Otóż polega on na tym ,że całość działa jakby za szybko. Zamiast przesuwać się do następnej pozycji ,a przeskakuje o 2 albo 3 pozycje. Wie ktoś jak to zrobić ,żeby tak nie przeskakiwało ? Oczywiście wszystko jest w pętli while

C/C++
if( al_key_down( & keyState, ALLEGRO_KEY_DOWN ) )
     menu++;

if( al_key_down( & keyState, ALLEGRO_KEY_UP ) )
     menu--;

if( menu > 3 )
     menu = 0;

switch( menu )
{
case 0:
    {
        al_clear_to_color( al_map_rgb( 255, 0, 0 ) );
        al_flip_display();
        break;
    }
case 1:
    {
        al_clear_to_color( al_map_rgb( 255, 255, 0 ) );
        al_flip_display();
        break;
    }
case 2:
    {
        al_clear_to_color( al_map_rgb( 255, 255, 255 ) );
        al_flip_display();
        break;
    }
case 3:
    {
        al_clear_to_color( al_map_rgb( 0, 255, 255 ) );
        al_flip_display();
        break;
    }
}

P-79226
pekfos
» 2013-03-23 16:48:01
Dodaj jakiś timer. Np taki:
C/C++
clock_t last = 0; //0 - nie nacisnieto
//..
if( nacisinieto && clock() > last + CLOCKS_PER_SEC ) //czy minela sekunda od ostatniego?
{
    last = clock();
    do_sth();
}
P-79228
matiasz
Temat założony przez niniejszego użytkownika
» 2013-03-24 00:43:17
Dzięki pomogło!
P-79271
matiasz
Temat założony przez niniejszego użytkownika
» 2013-03-24 11:10:56
Mam jeszcze jeden problem z tym menu mianowicie chcę ,aby po naciśnięciu klawisza "enter" (przy pozycji menu = 0) gra się rozpoczęła ,lecz gra rysuje się automatycznie bez wciskania klawisza "enter".Skutkiem tego jest migające menu na przemian z bitmapą gry.Czy to menu w ogóle jest dobre czy się nie nadaje ?
Kod:
C/C++
if( events.timer.source == menuTimer )
{
    if( al_key_down( & keyState, ALLEGRO_KEY_DOWN ) )
         menu++;
   
    if( al_key_down( & keyState, ALLEGRO_KEY_UP ) )
         menu--;
   
    if( menu > 2 )
         menu = 0;
   
    if( menu < 0 )
         menu = 2;
   
    switch( menu )
    {
    case 0:
        {
           
            al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
            al_draw_text( blazed, al_map_rgb( 0, 255, 0 ), 200, 100, 0, "Multiplayer Football" );
            al_draw_bitmap( menu1, 200, 200, 0 );
            al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
            if( al_key_down( & keyMenuState, ALLEGRO_KEY_ENTER ) );
           
            {
                graj( events, pilka, gracz1, gracz2, keyState, timer, bitmapTimer, event_queue, gracz1Bitmap, gracz2Bitmap, pilkaBitmap );
                rysuj( mapa, pilkaBitmap, gracz1Bitmap, gracz2Bitmap, pilka, gracz1, gracz2, blazed );
            }
            al_flip_display();
            break;
        }
    case 1:
        {
            al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
            al_draw_text( blazed, al_map_rgb( 0, 255, 0 ), 200, 100, 0, "Multiplayer Football" );
            al_draw_bitmap( menu2, 200, 200, 0 );
            al_flip_display();
            break;
        }
    case 2:
        {
            al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
            al_draw_text( blazed, al_map_rgb( 0, 255, 0 ), 200, 100, 0, "Multiplayer Football" );
            al_draw_bitmap( menu3, 200, 200, 0 );
            al_flip_display();
            break;
        }
    }
P-79288
pekfos
» 2013-03-24 12:12:14
C/C++
int x = 0; //0 - menu, 1 - gra, itd..
//..
switch( x )
{
case 0:
    //menu
    if( enter ) x = 1; //Przejdz do gry
   
    break;
case 1:
    //gra
    break;
}
Podstawy.. ;)
P-79299
matiasz
Temat założony przez niniejszego użytkownika
» 2013-03-24 13:40:49
Ok działa tylko dalej przeskakuje menu na przemian z obrazem gry :/
P-79303
pekfos
» 2013-03-24 13:47:13
Pokaż aktualny kod.
P-79305
matiasz
Temat założony przez niniejszego użytkownika
» 2013-03-24 13:49:52
Używam triple timer dlatego w osobnym switch'u jest sterowanie i rysowanie w przeciwnym wypadku wszystko się rozmazuje
C/C++
if( events.timer.source == menuTimer )
{
    if( al_key_down( & keyMenuState, ALLEGRO_KEY_DOWN ) )
         menu++;
   
    if( al_key_down( & keyMenuState, ALLEGRO_KEY_UP ) )
         menu--;
   
    if( menu > 3 )
         menu = 0;
   
    if( menu < 0 )
         menu = 3;
   
    switch( menu )
    {
    case 0:
        {
           
           
            if( al_key_down( & keyMenuState, ALLEGRO_KEY_ENTER ) )
            {
                al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
                gra = 1;
            }
            else
            {
                al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
                al_draw_text( blazed, al_map_rgb( 0, 255, 0 ), 200, 100, 0, "Multiplayer Football" );
                al_draw_bitmap( menu1, 200, 200, 0 );
                al_flip_display();
            }
           
            break;
        }
    case 1:
        {
            al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
            al_draw_text( blazed, al_map_rgb( 0, 255, 0 ), 200, 100, 0, "Multiplayer Football" );
            al_draw_bitmap( menu2, 200, 200, 0 );
            al_flip_display();
            break;
        }
    case 2:
        {
            al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
            al_draw_text( blazed, al_map_rgb( 0, 255, 0 ), 200, 100, 0, "Multiplayer Football" );
            al_draw_bitmap( menu3, 200, 200, 0 );
            if( al_key_down( & keyMenuState, ALLEGRO_KEY_ENTER ) )
            {
                al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
                gra = 3;
            }
            al_flip_display();
           
            break;
        }
    }
}
switch( gra )
{
case 1:
    {
        graj( events, pilka, gracz1, gracz2, keyState, timer, bitmapTimer, event_queue, gracz1Bitmap, gracz2Bitmap, pilkaBitmap );
        rysuj( mapa, pilkaBitmap, gracz1Bitmap, gracz2Bitmap, pilka, gracz1, gracz2, blazed );
        break;
    }
case 3:
    {
        done = true;
        break;
    }
}
P-79306
« 1 » 2
  Strona 1 z 2 Następna strona