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

[Allegro]Potrzebuje pomocy odnosnie MENU

Ostatnio zmodyfikowano 2008-12-24 23:59
Autor Wiadomość
smolu91
Temat założony przez niniejszego użytkownika
[Allegro]Potrzebuje pomocy odnosnie MENU
» 2008-12-23 18:57:12
Zrobilem niby menu z przyciskami ktore maja 2 grafiki przysniety i nie przycisniety. Teraz mam problem bo gdy wyswietlam screen na buforze i przyciski na screenie. To niby chodzi ok bo mam podlaczone menu pod klawiasze, ale gdy chce to zrobic w spob odwrotny czyli bufor na screenie i przyciski na buforze to juz sie robi problem bo miga caly ekran bo mam to wstawione w tak zwana petle nieskonczonosi az to puki nie nacisnie sie "ESC". Eh i jestem nowy jakbym mogl dodac kod programu do wiadomosci ?
P-2907
lynx
» 2008-12-23 19:16:18
Aby zapobiec miganiu ekranu, musisz wyświetlić obrazki, tła itp. w buforze, a następnie wyświetlić sam bufor na ekranie. :) Przykład:
C/C++
#include <allegro.h>

int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 24 );
    set_gfx_mode( GFX_AUTODETECT, 800, 600, 0, 0 );
    bitmap * bufor; //tworzymy bufor
    bufor = create_bitmap( 800, 600 ); //tworzymy w buforze bitmapę
    bitmap * obraz; //tworzymy obiekt obraz
    obraz = load_bmp( "c://obraz.bmp", default_palette ); //ladujemy jakiś obrazek do obiektu obraz
    do {
        blit( obraz, bufor, 0, 0, 0, 0, obraz->w, obraz->h ); //wysiwtlamy obraz w buforze
        blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); //wyswietlamy bufor na ekranie (screen)
    } while( !key[ KEY_ESC ] );
   
    destroy_bitmap( obraz );
    destroy_bitmap( bufor );
}
END_OF_MAIN();
P-2908
smolu91
Temat założony przez niniejszego użytkownika
» 2008-12-23 19:21:16
Dla jasnosci button1 to jest ten nie wcisniety, a 2 to wcisniety
mam cos takiego :
C/C++
#include <allegro.h>
BITMAP * button1 = NULL,
* button2 = NULL,
* bufor = NULL;



int menu()
{
   
   
    if( key[ KEY_T ] )
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        blit( button2, screen, 0, 0, 50, 300, button2->w, button2->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
    else
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button1, screen, 0, 0, 50, 300, button1->w, button1->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
    if( key[ KEY_G ] )
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button2, screen, 0, 0, 50, 360, button2->w, button2->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
    else
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button1, screen, 0, 0, 50, 360, button1->w, button1->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
   
    if( key[ KEY_Y ] )
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button2, screen, 0, 0, 50, 420, button2->w, button2->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
    else
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button1, screen, 0, 0, 50, 420, button1->w, button1->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
   
    if( key[ KEY_H ] )
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button2, screen, 0, 0, 50, 480, button2->w, button2->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
    }
    else
    {
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        masked_blit( button1, screen, 0, 0, 50, 480, button1->w, button1->h );
        blit( screen, bufor, 0, 0, 0, 0, 800, 600 );;
    }
   
   
   
}

int przebieg()
{
    while( !key[ KEY_ESC ] )
    {
        menu();
    }
}

int main()
{
    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
    enable_hardware_cursor();
    select_mouse_cursor( MOUSE_CURSOR_ALLEGRO );
    show_mouse( screen );
    unscare_mouse();
    clear_to_color( screen, makecol( 150, 150, 150 ) );
    bufor = create_bitmap( 800, 600 );
   
    button1 = load_bmp( "button1.bmp", default_palette );
    button2 = load_bmp( "button2.bmp", default_palette );
   
   
   
    przebieg();
   
   
    destroy_bitmap( button1 );
    destroy_bitmap( button2 );
    destroy_bitmap( bufor );
   
    allegro_exit();
    return 0;
}
END_OF_MAIN();
P-2909
lynx
» 2008-12-23 19:35:36
C/C++
if( key[ KEY_T ] )
{
    clear_to_color( bufor, makecol( 150, 150, 150 ) );
    blit( button2, screen, 0, 0, 50, 300, button2->w, button2->h );
    blit( screen, bufor, 0, 0, 0, 0, 800, 600 );
To powinno wyglądać tak:
wyświetlasz button2 w buforze, a następnie bufor wyświetlasz na ekranie. :) Inaczej po co tworzyć bufor? Czyli kod powinien wyglądać tak:
C/C++
if( key[ KEY_T ] )
{
    clear_to_color( bufor, makecol( 150, 150, 150 ) );
    blit( button2, bufor, 0, 0, 50, 300, button2->w, button2->h );
    blit( bufor, screen, 0, 0, 0, 0, 800, 600 );
I tak postąp ze wszystkim. :)
P-2911
smolu91
Temat założony przez niniejszego użytkownika
» 2008-12-23 19:38:11
no to tak mam :) a chcialbym sie ciebei zapytac bo chce zrobic zeby to sie naciskalo na myszke. Wiec musze uzyc kolizji gdy najade ta button oraz gdy nacisne np lewym myszy lecz nie wiem jak jest zakodowany lewy mysze :) w allegro z gory dzieki.
P-2912
lynx
» 2008-12-23 19:46:05
Tutaj masz artykuł o myszce w Allegro, a http://www.easykoder.vot.pl/arty/kolizja masz opisane kolizje.  W artykule o myszce masz opisany kod programu wyświetlającego kod przyciśniętego przycisku.

P.S. Staraj się też coś samemu znaleźć, a nie tylko na forum. ;)

/edit1:
Kod w c++ bierz w taki tekst: [code src="C++"]kod[/code]
P-2914
smolu91
Temat założony przez niniejszego użytkownika
» 2008-12-23 19:49:51
dzieki no ale to z wyswitlaniem niby kody wiem po szukalem robilem i kicha :)
P-2915
lynx
» 2008-12-23 19:59:02
Ale teraz Ci działa?
P-2917
« 1 » 2 3 4
  Strona 1 z 4 Następna strona