Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics...
Transcript of Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics...
Programozás I.Grafika
Programozás I.1. gyakorlat
Bevezetés, grafika
Surányi Márton
PPKE-ITK
2013.02.11.
1 / 1
Programozás I.Grafika
libgraphics
az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak
1 / 1
Programozás I.Grafika
libgraphics
az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak
1 / 1
Programozás I.Grafika
libgraphics
az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak
1 / 1
Programozás I.Grafika
libgraphics
az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak
1 / 1
Programozás I.Grafika
libgraphics
az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak
1 / 1
Programozás I.Grafika
libgraphics
az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak
1 / 1
Programozás I.Grafika
#include "graphics.hpp"
using namespace genv;
const static int SX = 640;const static int SY = 480;
int main(){gout.open(SX, SY);
gout << move_to(10,10) <<color(255,255,255) <<dot <<refresh;
gout << move(200,200) << color(255,0,0) << box(20,20);
2 / 1
Programozás I.Grafika
gout << color(0,255,0) << line(-100,0);
gout << color(255,255,0) << line_to(400,400) << refresh;
gout << move_to(200,100) << color(255,255,255) <<text("HELLO, WORLD!") << refresh;
event ev;while (gin >> ev) { }// az alkalmazásból az X megnyomásával léphetünk kireturn 0;
}
3 / 1
Programozás I.Grafika
gout
a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):
gout.open(640, 480);
ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:
gout « move_to(30,20) « color(255,0,0) « box(40,20);
4 / 1
Programozás I.Grafika
gout
a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):
gout.open(640, 480);
ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:
gout « move_to(30,20) « color(255,0,0) « box(40,20);
4 / 1
Programozás I.Grafika
gout
a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):
gout.open(640, 480);
ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:
gout « move_to(30,20) « color(255,0,0) « box(40,20);
4 / 1
Programozás I.Grafika
gout
a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):
gout.open(640, 480);
ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:
gout « move_to(30,20) « color(255,0,0) « box(40,20);
4 / 1
Programozás I.Grafika
gout
a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):
gout.open(640, 480);
ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:
gout « move_to(30,20) « color(255,0,0) « box(40,20);
4 / 1
Programozás I.Grafika
gout
érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre
5 / 1
Programozás I.Grafika
gout
érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre
5 / 1
Programozás I.Grafika
gout
érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre
5 / 1
Programozás I.Grafika
gout
érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre
5 / 1
Programozás I.Grafika
A képernyő - a vászon
6 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Szín beállítása
szín beállítása:
gout « color(R,G,B)
ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/
7 / 1
Programozás I.Grafika
Mozgatás
kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:
gout « move(X,Y);
és abszolút módon:
gout « move_to(X,Y);
relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”
8 / 1
Programozás I.Grafika
Mozgatás
kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:
gout « move(X,Y);
és abszolút módon:
gout « move_to(X,Y);
relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”
8 / 1
Programozás I.Grafika
Mozgatás
kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:
gout « move(X,Y);
és abszolút módon:
gout « move_to(X,Y);
relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”
8 / 1
Programozás I.Grafika
Mozgatás
kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:
gout « move(X,Y);
és abszolút módon:
gout « move_to(X,Y);
relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”
8 / 1
Programozás I.Grafika
Mozgatás
kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:
gout « move(X,Y);
és abszolút módon:
gout « move_to(X,Y);
relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”
8 / 1
Programozás I.Grafika
Mozgatás
kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:
gout « move(X,Y);
és abszolút módon:
gout « move_to(X,Y);
relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”
8 / 1
Programozás I.Grafika
Pont és vonal rajzolás
pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:
gout « move_to(30,45) « line(0,10);
gout « move_to(30,45) « line_to(30, 55);
(a fenti két példa ugyanazt a vonalat rajzolja)
9 / 1
Programozás I.Grafika
Pont és vonal rajzolás
pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:
gout « move_to(30,45) « line(0,10);
gout « move_to(30,45) « line_to(30, 55);
(a fenti két példa ugyanazt a vonalat rajzolja)
9 / 1
Programozás I.Grafika
Pont és vonal rajzolás
pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:
gout « move_to(30,45) « line(0,10);
gout « move_to(30,45) « line_to(30, 55);
(a fenti két példa ugyanazt a vonalat rajzolja)
9 / 1
Programozás I.Grafika
Pont és vonal rajzolás
pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:
gout « move_to(30,45) « line(0,10);
gout « move_to(30,45) « line_to(30, 55);
(a fenti két példa ugyanazt a vonalat rajzolja)
9 / 1
Programozás I.Grafika
Doboz rajzolás
A vonalhoz hasonlóan a doboz rajzolása mindig az aktuálispozíciótól kezdődik, végpont pedig relatív, vagy abszolút:
gout « move_to(40,40) « box(10,10);
gout « move_to(40,40) « box_to(50,50);
(a fenti két példa ugyanazt a dobozt rajzolja)
10 / 1
Programozás I.Grafika
Doboz rajzolás
A vonalhoz hasonlóan a doboz rajzolása mindig az aktuálispozíciótól kezdődik, végpont pedig relatív, vagy abszolút:
gout « move_to(40,40) « box(10,10);
gout « move_to(40,40) « box_to(50,50);
(a fenti két példa ugyanazt a dobozt rajzolja)
10 / 1
Programozás I.Grafika
Doboz rajzolás
A vonalhoz hasonlóan a doboz rajzolása mindig az aktuálispozíciótól kezdődik, végpont pedig relatív, vagy abszolút:
gout « move_to(40,40) « box(10,10);
gout « move_to(40,40) « box_to(50,50);
(a fenti két példa ugyanazt a dobozt rajzolja)
10 / 1
Programozás I.Grafika
Szöveg kiírása, segédfüggvények
szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):
gout « move_to(54,56) « text("Hello, World!");
A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).
11 / 1
Programozás I.Grafika
Szöveg kiírása, segédfüggvények
szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):
gout « move_to(54,56) « text("Hello, World!");
A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).
11 / 1
Programozás I.Grafika
Szöveg kiírása, segédfüggvények
szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):
gout « move_to(54,56) « text("Hello, World!");
A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).
11 / 1
Programozás I.Grafika
Szöveg kiírása, segédfüggvények
szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):
gout « move_to(54,56) « text("Hello, World!");
A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).
11 / 1
Programozás I.Grafika
REFRESH
FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)
12 / 1
Programozás I.Grafika
REFRESH
FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)
12 / 1
Programozás I.Grafika
REFRESH
FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)
12 / 1
Programozás I.Grafika
REFRESH
FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)
12 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
Eseménykezelés
Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:
typekeycodepos_x, pos_ybuttontime
13 / 1
Programozás I.GrafikaEseménykezelés
event adattagjai, lehetséges értékek
type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben
14 / 1
Programozás I.GrafikaEseménykezelés
event adattagjai, lehetséges értékek
type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben
14 / 1
Programozás I.GrafikaEseménykezelés
event adattagjai, lehetséges értékek
type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben
14 / 1
Programozás I.GrafikaEseménykezelés
event adattagjai, lehetséges értékek
type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben
14 / 1
Programozás I.GrafikaEseménykezelés
event adattagjai, lehetséges értékek
type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben
14 / 1
Programozás I.GrafikaEseménykezelés
Eseményciklus
Az eseményciklus a grafikus alkalmazás egyik fő ciklusa. Amíg ez aciklus fut, addig a program képes eseményeket fogadni.
15 / 1
Programozás I.GrafikaEseménykezelés
Példa
Példa: Bal egérkattintásra változtassuk meg a képernyő hátterénekszínét egy új, véletlenszerű színre!
#include "graphics.hpp"using namespace genv;
const int SX = 400;const int SY = 400;
int main() {srand(time(0));gout.open(SX, SY);
16 / 1
Programozás I.GrafikaEseménykezelés
event ev;while(gin >> ev) {if (ev.button == btn_left) {gout << color(rand() % 256, rand() % 256, rand() % 256)
<< move_to(0,0)<< box(SX,SY) << refresh;
}}return 0;
}
17 / 1
Programozás I.GrafikaEseménykezelés
Példa: Bal egérkattintásra rajzoljunk ki egy 20x20-as sárganégyzetet az adott egérpozícióba! Az alkalmazás escape-re lépjenki!
#include "graphics.hpp"#include <algorithm>using namespace genv;
const int SX = 640;const int SY = 480;
int main(){gout.open(640, 480);
18 / 1
Programozás I.GrafikaEseménykezelés
event ev;while (gin >> ev) {if (ev.button == btn_left) {gout << move_to(ev.pos_x, ev.pos_y)
<< color(255,255,0)<< box(20,20) << refresh;
}else if (ev.keycode == key_escape) {exit(0);
}}
return 0;}
19 / 1
Programozás I.GrafikaEseménykezelés
Fejlesszük tovább: írjunk a doboz rajzolására, illetve a véletlen színgenerálására függvényt! Valamint az enter lenyomására mentse el aképet output.bmp néven!
#include "graphics.hpp"#include <algorithm>using namespace genv;
void draw_box(int x, int y, color c, int size) {gout << move_to(x, y) << c << box(size, size);
}
color rand_color() {color ret(rand() % 256, rand() % 256, rand() % 256);return ret;
}
20 / 1
Programozás I.GrafikaEseménykezelés
int main(){gout.open(640, 480);event ev;while (gin >> ev) {if (ev.button == btn_left) {draw_box(ev.pos_x, ev.pos_y,
rand_color(),(rand() % 10) + 20);
gout << refresh;}else if (ev.keycode == key_escape) {exit(0);
}else if (ev.keycode == key_enter) {gout.save("output.bmp");
}}return 0;
}21 / 1
Programozás I.GrafikaEseménykezelés
Timer
az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát
22 / 1
Programozás I.GrafikaEseménykezelés
Timer
az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát
22 / 1
Programozás I.GrafikaEseménykezelés
Timer
az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát
22 / 1
Programozás I.GrafikaEseménykezelés
Timer
az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát
22 / 1
Programozás I.GrafikaEseménykezelés
Timer
az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát
22 / 1
Programozás I.GrafikaEseménykezelés
#include "graphics.hpp"#include <algorithm>#include <sstream>using namespace genv;
const int SX = 640;const int SY = 480;
int main(){gout.open(SX, SY);event ev;gin.timer(100);std::stringstream ss;
23 / 1
Programozás I.GrafikaEseménykezelés
while (gin >> ev) {if (ev.type == ev_timer) {
ss << "Eltelt ezredmasodpercek szama: " << ev.time;gout << move_to(0,0) << color(0,0,0) << box(SX,SY);gout << move_to(20,20) << color(255,255,0) << text( ss.str() ) << refresh;ss.str("");
}else if (ev.keycode == key_escape) {
exit(0);}
}return 0;
}
24 / 1
Programozás I.GrafikaEseménykezelés
Feladatok
1-1-a) Rajzoljunk egy random méretű narancssárga dobozt! (améretek legyenek 10 és 30 között)1-1-b) Rajzoljunk három darab random méretű dobozt,random pozícióba! (ügyeljünk rá, hogy véletlenül se „lóghassonle” egyik se a képernyőről!)1-1-c) Írjunk ebből függvényt: a függvény rajzoljon egyparaméterként adott pozícióba egy adott színű, randomméretű dobozt!1-1-d) Írjunk egy olyan függvényt is, ahol a doboz színét nemadhatjuk meg, hanem az is véletlenszerű!
25 / 1
Programozás I.GrafikaEseménykezelés
Feladatok (folyt.)
1-2) Nyiss egy 400x400-as ablakot, és rajzold meg a következőábrákat:
1-2-a) 1-2-b) 1-2-c) 1-2-d)
26 / 1
Programozás I.GrafikaEseménykezelés
Házi feladat
01.cpp 02.cpp 03.cpp 04.cpp
(a 01-es mappába töltsétek a házikat!)
27 / 1