16 cze 2012

Lekcja 1.0.3 Allegro5 - pliki nagłówkowe, inicjowanie Allegro, kolory

  W Allegro5 mamy modułową budowę elementów  składowych biblioteki jedne nagłówki  dodajemy przed innymi a więc:                         Link -> Przykłady z kursu.
#include <allegro5/allegro.h> - podstawowy plik nagłówkowy, dajemy go zawsze, zawarta w nim jest obsługa klawiatury i myszki, obsługa okna, itd.
#include <allegro5/allegro_primitives.h> - rysowanie linii, okręgów, trójkątów, kwadratów, itd.
#include <allegro5/allegro_image.h> -wyświetlanie i zapis obrazów BMP, PCX, TGA, JPEG,  PNG.
#include <allegro5/allegro_font.h> - czcionka bitmapowa.
#include <allegro5/allegro_ttf.h>   - czcionka ttf. (TrueType) (z #include <allegro5/allegro_font.h> )
#include <allegro5/allegro_color.h> - zmiana formatu kolorów rgb, cmyk, hsl, yuv, html.
#include <allegro5/allegro_audio.h> - odtwarzanie, zapis dźwięku.
#include <allegro5/allegro_acodec.h> - kodeki audio .wav, .flac, .ogg, .it, .mod,.s3m,.xm.(z  #include <allegro5/allegro_audio.h> )
#include <allegro5/allegro_native_dialog.h> - tworzenie okien dialogowych.
#include <allegro5/allegro_opengl.h>
#include <allegro5/allegro_direct3d.h>
#include <allegro5/allegro_physfs.h> - odczyt plików .zip
#include <allegro5/allegro_memfile.h> - odczyt i zapis do pamięci komputera.
od Allegro5.1.0
#include <allegro5/allegro_video.h> - odczyt plików wideo
#include <allegro5/allegro_shader.h> - cieniowanie, vertex i pixel shader, GLSL, HLSL lub Cg.
Więcej informacji w kolejnych lekcjach.
                                                              KOLORY
W Allegro5 do reprezentacji kolorów mamy strukturę w skład której wchodzą trzy lub cztery argumenty:
ALLEGRO_COLOR al_map_rgbunsigned char r, unsigned char g, unsigned char b)
ALLEGRO_COLOR al_map_rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
  Przykłady:
al_map_rgb( 0128255); argumenty to liczby unsigned char czyli z zakresu od 0 do 255.
al_map_rgba0128255,255); tu jak wyżej plus kanał alpha ( 255 brak )
al_map_rgb_f( 0.0, 0.5, 1.0); argumenty to liczby float z zakresu 0.0f do 1.0f
al_map_rgba_f( 0.0, 0.5, 1.0, 1.0); tu jak wyżej plus kanał alpha  ( 1.0f  brak)
Możemy również utworzyć zmienną
ALLEGRO_COLOR czerwonyal_map_rgb255,  0,  0); - liczby typu unsigned char
ALLEGRO_COLOR zielony     = al_map_rgb_f(  0.0, 1. 0,  0.0); - liczby typu  float
Przykład.
// Program kolory i inicjowanie Allegro
#include <allegro5/allegro.h>
#include <allegro5\allegro_native_dialog.h>
ALLEGRO_DISPLAY *okno = NULL;
int main()
{
    if(!al_init()) {
    al_show_native_message_box(okno, "Błąd", "hej no co?",
    "Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  }
    al_set_new_window_position(20,30);
    al_set_new_display_flags(ALLEGRO_WINDOWED);
    okno = al_create_display( 320, 240);
    if(!okno) {
    al_show_native_message_box(okno, "Błąd", "NULL",
    "Nie mogę utworzyć okna!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  }
   al_set_window_title( okno,"Kolory i inicjowanie Allegro5");
   ALLEGRO_BITMAP *kwadrat*prostokat= NULL;
   kwadrat  = al_create_bitmap(50,50);
   prostokat= al_create_bitmap(100,50);
if(!kwadrat or !prostokat) {
    al_show_native_message_box(okno, "Błąd", "Coś nie tak",
    "Nie mogę utworzyć bitmap!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  }
   al_set_target_bitmap(kwadrat);
   al_clear_to_color(al_map_rgb(0,255,0));
   al_set_target_bitmap(prostokat);
   al_clear_to_color(al_map_rgb(255,0,0));
   al_set_target_bitmap(al_get_backbuffer(okno));
   al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0));
   al_draw_bitmap(kwadrat, 100, 100, 0);
   al_draw_bitmap(prostokat,125, 125, 0);
   al_flip_display();
   al_rest(5.0);
   al_destroy_display(okno); //usuwamy okno z pamięci i zwalniamy pamięć 
    return 0;
}
Opis:
#include <allegro5/allegro.h> 
      if(!al_init()) {
      al_show_native_message_box(okno, "Błąd", "hej no co?",
      "Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
       NULL, ALLEGRO_MESSAGEBOX_ERROR);
      return 0;
   }
   - plik nagłówkowy,  inicjowanie  i sprawdzenie czy można zainicjować Allegro5 za pomocą funkcji  al_show_native_message_box - wcześniej dołączamy nagłówek #include<allegro5\allegro_native_dialog.h> w przypadku niepowodzenia zwraca NULL i wyświetla 
Możemy również sprawdzać w konsoli dla C++
#include <iostream>
   if(!al_init()){
std::cout << "Nie mozna zainicjowac Allegro5!" << std::endl;
getchar();
return 0;
}
 else   std::cout << "Zainicjowano Allegro5!\n" << std::endl;
zamykać konsole klawiszem enter lub escape.
 lub dla C:
#include <stdio.h>
  if(!al_init()){
         fprintf(stderr, "Nie mozna zainicjowac Allegro5!");
         return -1;
    }
 else fprintf(stderr, "Zainicjowano Allegro5!\n");
Gdy nie chcemy sprawdzać dajemy po prostu: al_init(); - kończymy średnikiem.
al_set_new_window_position(20,30); - pozycja okna na ekranie.
al_set_new_display_flags - flagi jakie udostępnia Allegro5:
al_set_new_display_flags(ALLEGRO_WINDOWED); - Ekran  w trybie okienkowym  
al_set_new_display_flags(ALLEGRO_RESIZABLE | ALLEGRO_WINDOWED ); - Ekran w  trybie okienkowym + zmiana rozmiaru +  przycisk maksymalizacji resizable (tylko w połączeniu z ALLEGRO_WINDOWED).
al_set_new_display_flags(ALLEGRO_FULLSCREEN); - Ekran w trybie pełnoekranowym.
al_set_new_display_flags(ALLEGRO_NOFRAME); - Okno bez ramki (tj. nie ma granicy (ramki) lub paska tytułowego).
al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW); - Ekran trybie pełnoekranowym  - rozdzielczość zależna od wielkości ekranu na pulpicie (bez względu na to co wpiszemy do "al_create_display").
al_set_new_display_flags(ALLEGRO_OPENGL);
al_set_new_display_flags(ALLEGRO_OPENGL_3_0);
al_set_new_display_flags(ALLEGRO_DIRECT3D);
al_set_new_display_flags(ALLEGRO_OPENGL_FORWARD_COMPATIBLE);
al_set_new_display_flags(ALLEGRO_GENERATE_EXPOSE_EVENTS);
ALLEGRO_DISPLAY *okno = NULL; - tworzymy wskaźnik do naszego ekranu, który nazwaliśmy sobie okno.
 Istnieje możliwość utworzenia więcej niż jednego okna, wystarczy podać inną nazwę.
okno = al_create_display( 320, 240); - utworzenie okna o podanych wymiarach.
 if(!okno) {
    al_show_native_message_box(okno, "Błąd", "Błąd", "Dodaj\nal_create_display\nLub\nDostosuj rozdzielczość",
    "Bo nie mogę utworzyć okna!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  } - sprawdzenie czy można utworzyć okno, w przypadku braku możliwości, zwróci false.

al_set_window_title( okno,"Kolory i inicjowanie Allegro5"); // tytuł okna.

   ALLEGRO_BITMAP *kwadrat*prostokat= NULL; // wskaźniki do bitmap
   kwadrat  = al_create_bitmap(50,50);    // rozmiar bitmapy
   prostokatal_create_bitmap(100,50); // rozmiar bitmapy
if(!kwadrat or !prostokat) {
    al_show_native_message_box(okno, "Błąd", "Coś nie tak",
    "Nie mogę utworzyć bitmap!",
    NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return 0;
  } - sprawdzenie czy można utworzyć bitmapy, w przypadku braku możliwości, zwróci false.
al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(0,255,0)); // nadajemy dany kolor każdej bitmapie
al_set_target_bitmap(prostokat);
al_clear_to_color(al_map_rgb(255,0,0));

al_set_target_bitmap(al_get_backbuffer(okno)); // powracamy do naszego okna
al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0));  // czyści okno podanym kolorem.
al_draw_bitmap(kwadrat, 100, 100, 0); // wyświetlamy nasz kwadrat  pozycja  x i y
al_draw_bitmap(prostokat,125, 125, 0); // tu również, trzeci parametr to obrócenie i odwrócenie 0,1,2,3. 
al_flip_display(); //  wyświetlamy wszystko na ekran
 al_rest(5.0); // jako że nie znamy jeszcze obsługi klawiatury, aby zamknąć nasz program, dajemy pauzę 5 sekund i program się zamyka. 
al_destroy_display(okno); // usuwamy okno z pamięci i zwalniamy pamięć