Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy.

Podobne dokumenty
Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Programowanie komputerowe. Zajęcia 1

tablica: dane_liczbowe

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Jak dodać własny szablon ramki w programie dibudka i dilustro

Programowanie w językach

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Kurs WWW. Paweł Rajba.

Grafika w aplikacjach lp. Jak zmienić kolor tła?

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

Programowanie - wykład 4

Programowanie Procedurale. Pliki w języku C++

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Podstawy programowania w C++

Ćwiczenia podstawowe, zestaw 5, część 1

1 Temat: Wprowadzenie do biblioteki OpenCV

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Wstęp do Programowania 2

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

1. Wprowadzenie do C/C++

Allegro5 część 4 Timer i myszka Timer i myszka Autor: Kamil Krzyszczuk - C mons

Pytania sprawdzające wiedzę z programowania C++

Część 4 życie programu

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Podstawy Programowania Podstawowa składnia języka C++

Wyjątki (exceptions)

Programowanie w języku C++

Wstęp. Opis programu :

Praktyka programowania projekt

Narzędzia programu Paint

1. Wprowadzenie do C/C++

Wstęp do programowania obiektowego, wykład 7

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Operacje wejścia/wyjścia (odsłona druga) - pliki

Ćwiczenie 1 Galeria zdjęć

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Tekst na mapach. Teksty na mapie. Ustawienia mapy. W tej instrukcji zostanie opisany sposób w jaki można na mapach wyświetlać teksty

Operacje wejścia/wyjścia odsłona pierwsza

PyGame Gra w Ponga. Spis treści

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Wstęp do programowania

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Zgrywus dla Windows v 1.12

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

I - Microsoft Visual Studio C++

Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy

Wstęp do informatyki- wykład 11 Funkcje

Polimorfizm w pigułce

3. Instrukcje warunkowe

Opis Edytora postaci Logomocji

Wprowadzenie do środowiska Qt Creator

Rysowanie punktów na powierzchni graficznej

Wstęp do programowania

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

Obsługa programu Paint. mgr Katarzyna Paliwoda

Programowanie komputerowe. Zajęcia 4

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Techniki Programowania wskaźniki

Programowanie obiektowe i C++ dla matematyków

Kurs Adobe Photoshop Elements 11

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wskaźniki w C. Anna Gogolińska

1. Opis okna podstawowego programu TPrezenter.

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Podstawy Programowania

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wstęp do programowania

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Przeciążenie (przeładowanie nazw) funkcji

Przekazywanie argumentów wskaźniki

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Wstęp do programowania

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

C++ wprowadzanie zmiennych

Szablon klasy std::vector

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Wstęp do programowania

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

Schematy blokowe. Algorytmy Marek Pudełko

1 Podstawy c++ w pigułce.

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Transkrypt:

Allegro5 3/x. Przykład wklejamy go do dev'a zamiast kodu domyślnego dal programu z allegro i kompilujemy. #include <stdio.h> #include <allegro5/allegro5.h> #include <allegro5/allegro_primitives.h> #include <allegro5/allegro_image.h> #include <iostream> using namespace std; int main() al_init(); al_init_image_addon(); al_init_primitives_addon(); al_install_keyboard(); ALLEGRO_DISPLAY * display = NULL; const int szer=1024,wys=768; display = al_create_display(szer, wys); if (!display ) cout << "Nie udalo sie utworzyc okna!" << endl; ALLEGRO_BITMAP *o1 = al_load_bitmap("a.bmp"); if (!o1 ) cout << "Nie udalo sie wczytac obrazka 'a.bmp'." << endl; ALLEGRO_BITMAP *o2 = al_load_bitmap("b.bmp"); if (!o2 ) cout << "Nie udalo sie wczytac obrazka 'b.bmp'." << endl; al_convert_mask_to_alpha( o1, al_map_rgb(255,0,255) ); al_set_window_title(display,"obrazki."); ALLEGRO_KEYBOARD_STATE key_state; al_get_keyboard_state(&key_state); while(!al_key_down(&key_state, ALLEGRO_KEY_ESCAPE)) al_get_keyboard_state(&key_state); al_clear_to_color( al_map_rgb(0,0,80) ); if ( al_key_down(&key_state, ALLEGRO_KEY_SPACE) ) al_set_blender(allegro_add, ALLEGRO_ONE, ALLEGRO_ONE); else al_set_blender(allegro_add, ALLEGRO_ONE, ALLEGRO_ZERO); al_draw_bitmap( o2, 150, 60, 0 ); al_draw_bitmap( o1, 10, 50, 0 ); al_flip_display(); al_destroy_bitmap( o1 ); al_destroy_bitmap( o2 );

N początek teoria ;-) Kolor kluczowy. Czym jest ten tajemniczy kolor kluczowy? Otóż sprawa jest banalna a sama technika bardzo przydatna. Kolor kluczowy to inaczej kolor który będzie tłem obrazka, wyobraź sobie, że masz narysowanego bohatera a tłem obrazka jest różowy kolor - jak narysujesz tą bitmapę to narysujesz bohatera razem z tym tłem co zazwyczaj nie jest pożądanym efektem. Najlepiej zobrazuje to przykład: Jak widać razem z bohaterem wyświetla się tło. Tutaj zaś użyto koloru kluczowego, innymi słowy ustawiono różowy kolor na kolor w pełni przeźroczysty. Opisując to konkretniej można powiedzieć, że każdy różowy piksel ma ustawiony kanał alpha na zero. Widzisz już zapewne różnice. Tak więc jest to bardzo przydatne Np. kiedy za graczem są jakieś krajobrazy, tło gry, niebo, czy cokolwiek innego. Blending. Blending jest równie ważna techniką pozwala bowiem na wpół przeźroczyste rysowanie obrazków ( Np. szkło lub woda pod która widać piasek na plaży. ) technika ta pozwala na uzyskanie takich efektów poprzez mieszanie kolorów podstawy czyli tła i źródła czyli obrazka. Mieszanie odbywa się na postawie koloru pikseli i ich kanału alpha. Kanał alpha informuje jak bardzo przeźroczysty jest każdy z pikseli. Minimalna wartość czyli zero oznacza, że piksel jest całkowicie niewidoczny a maksymalna wartość czyli 255 oznacza, że piksel jest w pełni do zobaczenia. Tak więc półprzeźroczysty piksel jak już się pewnie domyślasz będzie miał wartość alpha ustawioną na 128 czyli połowa ale nic nie stoi na przeszkodzie aby ustawić jeszcze inną wartość - przez co uzyskać możemy różne stopnie przeźroczystości. Obroty i skalowanie. Rysowanie obróconej bitmapy to po prostu rysowanie obróconej bitmapy nie ma tu głębszej filozofii :) wstawiamy obrazek obrócony o jakiś kąt. Zaś skalowanie dla co po niektórych może być nowym słowem tak więc wyjaśniam. Rysowanie obrazka w innej skali to rysowanie go powiększonego lub zmniejszonego czyli skalowanie. Możemy skalować na osi X i na osi Y czyli rozciągnąć go w poziomie i w pionie - lub skurczyć. Analiza kodu. #include <allegro5/allegro_image.h> Jak już widać na początku musimy dodać kolejny nagłówek. Tym razem dotyczy on wczytywania bitmap czyli obrazków. al_init_image_addon(); Kolejną nowością jest ta oto funkcja - instaluje ona system wczytywania bitmap. ALLEGRO_BITMAP *o1; W tej linijce zaś widzimy wskaźnik na bitmapę. To on będzie przechowywał ( wskazywał ) nasz obrazek. Takich wskaźników możemy mieć rzecz jasna kilka zależy ile obrazków chcemy używać. al_load_bitmap("a.bmp"); Ta oto funkcja wczytuje podaną przez nas bitmapę i zwraca do niej wskaźnik. Jej parametr to const char *filename przechowujący ścieżkę do pliku i samą nazwę pliku wraz z rozszerzeniem.

if (!logo ) std::cout << "Nie udalo sie wczytac obrazka 'a.bmp'." << std::endl; getchar(); return; Ta część bloku sprawdza czy bitmapa została poprawnie wczytana jeśli cos poszło nie tak to informuje o tym w konsoli, czeka na klawisz po czym wychodzi z głownej funkcji czyli kończy działanie programu. int logoszer = al_get_bitmap_width(o1); int logowys = al_get_bitmap_height(o1); W tym miejscu widzimy kolejno dwie przydatne funkcje. Pierwsza z nich al_get_bitmap_width() zwraca szerokość bitmapy w pikselach druga zaś al_get_bitmap_height() zwraca wysokość bitmapy w pikselach. Obie przyjmują jako parameter wskaźnik na bitmapę czyli ALLEGRO_BITMAP * al_convert_mask_to_alpha( o2, al_map_rgb(255,0,255) ); Ta funkcja ustawia kolor kluczowy danej bitmapy. Konkretnie ustawia każdy piksel o podanym kolorze na niewidoczny czyli o wartości alpha równej zero. Parametry funkcji są następujące: ALLEGRO_COLOR mask_color Wskaźnik na bitmapę dla której ma być ustawiony kolor kluczowy. Kolor kluczowy czyli kolor który ma być niewidoczny. al_set_blender(allegro_add, ALLEGRO_ONE, ALLEGRO_ONE); Ta funkcja ustawia blending - czyli sposób mieszania kolorów - oraz koloryzowanie przy rysowaniu w tym i kanał alpha czyli stopień przeźroczystości. Szczegóły na http://alleg.strangesoft.net/docs/graphics.html#al_set_blender al_draw_bitmap( o2, 10, 50, 0 ); Ta funkcja rysuje bitmapę w podanym miejscu. Jej parametry są następujące: Położenie rysowania bitmapy na osi X Położenie rysowania bitmapy na osi Y Dostępne flagi dla rysowania bitmapy: ALLEGRO_FLIP_HORIZONTAL ALLEGRO_FLIP_VERTICAL Odwraca bitmapę w poziomie Odwraca bitmapę w pionie al_draw_bitmap_region( logo, 0, 0, 100, 90, 150, 160, 0 ); Ta funkcji pozwala na rysowanie tylko fragmentu bitmapy jej skrawka. Oto jej parametry: float sx float sy float sw float sh Miejsce wycięcia fragmentu - na osi X Miejsce wycięcia fragmentu - na osi Y Szerokość wycinanego fragmentu. Wysokość wycinanego fragmentu. Położenie rysowania fragmentu bitmapy na osi X Położenie rysowania fragmentu bitmapy na osi Y są takie same jak w przypadku funkcji al_draw_bitmap(); al_draw_scaled_bitmap( logo, 0, 0, logoszer, logowys, 260, 160, 80, 80, 0 );

Zaś ta funkcja pozwala na narysowanie zeskalowanej bitmapy dodatkowo pozwala wybrać fragment bitmapy który ma być zeskalowany i narysowany. Parametry tejże funkcji to: float sx float sy float sw float sh float dw float dh Miejsce wycięcia fragmentu - na osi X Miejsce wycięcia fragmentu - na osi Y Szerokość wycinanego fragmentu. Wysokość wycinanego fragmentu. Położenie rysowania fragmentu bitmapy na osi X Położenie rysowania fragmentu bitmapy na osi Y Szerokość do której ma być zeskalowany fragment Wysokość do której ma być zeskalowany fragment są takie same jak w przypadku funkcji al_draw_bitmap(); al_draw_rotated_bitmap( logo, logoszer/2, logowys/2, 540, 160, PI*90/180, 0 ); Ta oto funkcja rysuje obróconą bitmapę o jakiś kąt wokół punktu którego położenie jest względne od położenia rysowania. Oto jej parametry: float cx float cy float angle Położenie punktu na osi X względem położenia Położenie punktu na osi Y względem położenia Położenie bitmapy na osi X Położenie bitmapy na osi Y Kąt obrotu w radianach. Zmienna float angle przyjmuje kąt obrotu w radianach a nie w stopniach! Należy o tym pamiętać. Jeśli chcemy podać w stopniach musimy użyć wzoru czyli pomnożyć stopnie przez liczbę PI a następnie podzielić to przez 180. są takie same jak w przypadku funkcji al_draw_bitmap(); al_draw_scaled_rotated_bitmap( logo, logoszer/2, logowys/2,470,160,0.5,0.5, PI*45/180, NULL ); Ta funkcja rysuje zarazem obróconą i zeskalowaną bitmapę. Jej parametry to: float cx float cy float xscale float yscale float angle Położenie punktu na osi X względem położenia Położenie punktu na osi Y względem położenia Położenie bitmapy na osi X Położenie bitmapy na osi Y Wartość przez którą pomnożona będzie szerokość bitmapy przy rysowaniu. Wartość przez którą pomnożona będzie wysokość bitmapy przy rysowaniu. Kąt obrotu w radianach. są takie same jak w przypadku funkcji al_draw_bitmap(); al_destroy_bitmap( o1 ); Usuwa wczytaną uprzednio bitmapę. Innymi słowy jeżeli już nie potrzebujemy obrazka a nie chcemy aby zajmował on wciąż miejsce w pamięci komputera, to używamy tejże funkcji. Jako parametr podajemy wskaźnik na bitmapę.

To koniec analizy. Program wyświetla kilka bitmap i gdy naciśniemy spację wszystkie obrazki stają się przeźroczyste. Zadanko: Dostosuj rozmiar okna do rozmiaru wczytanego obrazka z tłem, zeskakuj pacmana, usuń mu śmieci, pomyśl (i zrób żeby się pacman jeździł jak się naciska strzałki na klawiaturze