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

[C++, Allegro 5] Pobieranie koloru za pomocą funkcji al_unmap_rgb

Ostatnio zmodyfikowano 2014-08-11 17:14
Autor Wiadomość
Joda332
Temat założony przez niniejszego użytkownika
[C++, Allegro 5] Pobieranie koloru za pomocą funkcji al_unmap_rgb
» 2014-08-11 16:14:50
Witam, mi chodzi o tą kluczową literkę wyświetlania jak jest w liczbach całkowitych
int x = 1 ;
al_draw_textf(font8,al_map_rgb(255,255,0), 10, 30,0,"x =%d ",x);
//albo liczby typu double:
double y = 1.11 ;
al_draw_textf(font8,al_map_rgb(255,255,0), 10, 20,0,"y= %g ",y);
tylko mi jest potrzebna do unsigned char ,ponieważ robię kolizje ale mi kosmiczne liczby pokazuje .
P-115314
Monika90
» 2014-08-11 16:35:51
A w jakiej postaci chcesz to wyświetlić liczby czy znaku? Odpowiednio będzie to %d i %c
P-115318
Joda332
Temat założony przez niniejszego użytkownika
» 2014-08-11 16:39:20
Próbuje rozpracować getpixel, czyli potrzebuję wyświetlić liczbę :)
%c nie działa wcale, %d wyświetla mi kosmiczne liczby a nie od 0 - 255 .
  
P-115319
Monika90
» 2014-08-11 16:46:41
getpixel zwraca int, nie unsigned char, najlepiej pokaż kod.
P-115320
Joda332
Temat założony przez niniejszego użytkownika
» 2014-08-11 16:52:56
Kod jest długi ale zaznaczę kluczowe elementy :
C/C++
#include <allegro5/allegro.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_image.h>

int szer = 1366, wys = 766, rozm = 1000;
double kat = 0, s1 = 0.1, o1 = 1;
#define PI 3.14
int main()
{
    al_init();
    al_install_keyboard();
    al_init_font_addon();
    al_init_image_addon();
    ALLEGRO_KEYBOARD_STATE klawiatura;
    ALLEGRO_DISPLAY * okno = al_create_display( szer, wys );
    al_set_window_title( okno, "Allegro5 klawiatura i czas" );
    ALLEGRO_BITMAP * kwadrat = al_create_bitmap( rozm, rozm );
    ALLEGRO_FONT * font8 = al_create_builtin_font();
    al_set_target_bitmap( kwadrat );
    al_clear_to_color( al_map_rgb( 0, 0, 0 ) );
    al_set_target_bitmap( al_get_backbuffer( okno ) );
    ALLEGRO_BITMAP * drzewo1 = al_load_bitmap( "Files/drzewo1.png" );
    ALLEGRO_BITMAP * pilka = al_load_bitmap( "Files/pilka.png" );
    al_convert_mask_to_alpha( pilka, al_map_rgb( 255, 0, 255 ) );
    ALLEGRO_BITMAP * bmp = al_get_backbuffer( okno ); ///**************************************************************
    ALLEGRO_LOCKED_REGION * lock = al_lock_bitmap( bmp, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READWRITE ); ///**********
    int r, g, b; ///****************************
    int x = 140, y = 100;
    double czas = al_get_time();
    while( !al_key_down( & klawiatura, ALLEGRO_KEY_ESCAPE ) )
    {
        ALLEGRO_COLOR color = al_get_pixel( bmp, x, y ); ///****************************
        al_unmap_rgb( color,( unsigned char * ) & r,( unsigned char * ) & g,( unsigned char * ) & b ); ///*********
       
        al_get_keyboard_state( & klawiatura );
        if( al_get_time() > czas + 0.0001 )
        {
           
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_RIGHT ) && x < szer -( rozm * s1 / 2 ) ) x = x + 1;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_LEFT ) && x -( rozm * s1 / 2 ) > 0 ) x = x - 1;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_DOWN ) && y < wys -( rozm * s1 / 2 ) ) y = y + 1;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_UP ) && y -( rozm * s1 / 2 ) > 0 ) y = y - 1;
           
            if( y -( rozm * s1 / 2 ) < 0 ) y++;
           
            if( y > wys -( rozm * s1 / 2 ) ) y--;
           
            if( x -( rozm * s1 / 2 ) < 0 ) x++;
           
            if( x > szer -( rozm * s1 / 2 ) ) x--;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_W ) ) kat += 1;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_S ) ) kat -= 1;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_R ) && s1 < 1 ) s1 += 0.001;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_F ) && s1 > 0.1 ) s1 -= 0.001;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_E ) ) o1 += 0.5;
           
            if( al_key_down( & klawiatura, ALLEGRO_KEY_D ) ) o1 -= 0.5;
           
            czas = al_get_time();
        }
        //al_clear_to_color(al_map_rgb(0,195,255));
        al_draw_tinted_scaled_rotated_bitmap( drzewo1, al_map_rgba_f( 1.0, 1.0, 1.0, 1 ), 0, 0, 0, 0, 1.71, 1.3, 0, 0 );
        al_draw_tinted_scaled_rotated_bitmap( pilka, al_map_rgba( 255, 255, 255, o1 ), rozm / 2, rozm / 2, x, y, s1, s1, PI * kat / 180, 0 );
        al_draw_textf( font8, al_map_rgb( 255, 255, 0 ), 10, 10, 0, "x=%d , y=%d", x, y );
        al_draw_textf( font8, al_map_rgb( 255, 255, 0 ), 10, 20, 0, "kat=%g , s1=%g", kat, s1 );
        al_draw_textf( font8, al_map_rgb( 255, 255, 0 ), 10, 30, 0, "o1=%g ", o1 );
        al_draw_textf( font8, al_map_rgb( 255, 255, 0 ), 10, 40, 0, "r=%d , g=%d , b=%d", r, g, b );
        al_draw_textf( font8, al_map_rgb( 255, 255, 0 ), 10, 50, 0, "x=%d , y=%d", x, y );
        if( r == 0, g == 194, b == 254 )
        {
            al_draw_textf( font8, al_map_rgb( 0, 0, 0 ), 50, 80, 0, "Bla, bla działa bla, bla" );
        }
       
        if( kat > 360 ) kat = 0;
       
        if( o1 > 255 ) o1 = 255;
       
        if( kat < - 360 ) kat = 0;
       
        if( o1 < 0 ) o1 = 0;
       
        al_draw_pixel( x, y, al_map_rgb( 0, 0, 0 ) ); ///*********
        al_unlock_bitmap( bmp ); ///*********
        al_flip_display();
       
        //al_rest(0.001);
    }
    al_destroy_bitmap( drzewo1 );
    al_destroy_bitmap( kwadrat );
    al_destroy_display( okno );
    return 0;
}
P-115322
Joda332
Temat założony przez niniejszego użytkownika
» 2014-08-11 16:58:15
Ja nie wiem, w allegro 4 zwracało int a tutaj ja nie wiem, a to jest program do ogarniania nowych funkcji jakie ma allegro 5, a ten sposób na getpixel znalazłem w necie i jest ponoć bardzo szybki .
P-115324
Monika90
» 2014-08-11 17:03:33
te zmienne są typu int
C/C++
int r, g, b; ///****

C/C++
al_unmap_rgb( color,( unsigned char * ) & r,( unsigned char * ) & g,( unsigned char * ) & b );
ta funkcja wymaga wskaźników do zmiennych typu unsigned char, jeżeli użyjesz jej tak jak tu, to dokona ona zapisu do najmniej znaczących bajtów zmiennych r, g i b, pozostałe bajty pozostną niezdefiniowane, bo niezainicjalizowałeś zmiennych r, g i b. Ich zainicjalizowanie zerami powinno pomóc, ale pewnie najlepiej byłoby zmienić im typ na unsigned char.
P-115325
Joda332
Temat założony przez niniejszego użytkownika
» 2014-08-11 17:14:14
Dzięki wielkie, działa :) myślałem że te wskaźniki służyły do pokazania zakresu liczb jaki ma być, dlatego tego nie ruszałem, a cały kod który zaznaczyłem komentarzami to kopia z netu i o dziwo deklaracja int r,b,g;  też były z tej strony. No nic jeszcze raz dzięki. Zamykam temat.
P-115327
« 1 »
  Strona 1 z 1