13. Začínáme s grafikou <<< Obsah >>> 15. Vybarvi si sám
Nelíbí-li se vám slovo "mišmaš" v nadpisu kapitoly, dosaďte si třeba "změť". Ve slovníku ho možná nenajdete, ale zřejmě nejlépe vystihuje to, co teď budeme tvořit.
Vyzkoušíme si základní grafické příkazy pro kreslení. Vytvořte nový program s názvem Grafika nebo otevřete již hotový program v ukázkových programech Petra.
Petříka nebudeme v našem programu
potřebovat, proto na začátku programu vypneme jeho viditelnost
příkazem viditelný s
parametrem ne
.
Základem programu bude cyklus podmíněné opakování příkazů
s
přerušením klávesou Esc
.
Přidejte ho za vypnutí viditelnosti Petříka a vložte do něj
příkaz čekání.
Dalším, velmi důležitým, úkonem je
zprůhlednění políček ve vrstvě předmětů. Vyvolejte
editaci předmětu prázdné
políčko . V okénku volby barev
vyberte barvu vlevo nahoře (našedle fialová). Je to průhledná barva, která zajistí zprůhlednění políčka s
předmětem. V nástrojích pro kreslení vyberte vyplněný obdélník
a
překreslete celou plochu předmětu průhlednou barvou.
Když teď program spustíte, neuvidíte nic jiného než černou plochu. Vidíte grafickou vrstvu, která se stane základem našich dalších programů. V budoucnu budeme používat předměty i grafiku současně. Po vyzkoušení prvního grafického příkazu si můžete zkusit vkreslit něco do předmětu prázdného políčka. Uvidíte vykreslovanou grafiku a přes ni síť obrázků prázdných políček.
V okně Základních prvků si nalistujte skupinu grafika , podskupinu kreslení
.
Najdete v ní příkazy pro kreslení grafických prvků.
Vezměte příkaz bod
a
vložte ho do hlavní smyčky programu. Příkaz obsahuje další
čtyři prvky, sloužící k zadání parametrů vykreslovaného
bodu.
První parametr, barva pera ,
určuje barvu bodu. Barva je číslo, které můžeme uchovávat
v číselné proměnné. Jeho hodnota nás zatím nezajímá,
protože na určování barvy můžeme používat speciální
funkce. U nově vytvořeného příkazu prvek barva pera
obsahuje prvek barva
. Je
to konstanta
barvy, předávající
příkazu zvolenou barvu. Novou barvu vybereme dvojitým
kliknutím levým tlačítkem myši na prvek konstanty barvy.
Objeví se okno volby barev, vybraná barva je označena
vyvýšením políčka. Kliknutím na některou z barev vybereme
jinou barvu. Uvidíme ji také v ikonce prvku konstanty barvy.
V našem programu budeme chtít vykreslovat
body s náhodnou barvou. Vyhodíme proto pryč konstantu barvy a
na její místo dosadíme prvek sloučení barevných složek do barvy (ze
skupiny grafika
).
Prvek obsahuje další tři prvky, červená složka (0 až 1)
, zelená složka (0 až 1)
a modrá složka (0 až 1)
.
Prvky určují úroveň jednotlivých barevných složek ve
výsledné barvě. Čím víc se hodnota složky blíží číslu
1, tím je složka světlejší. Například žlutá barva
vznikne hodnotami 1/1/0. Náhodnou barvu vytvoříme tak, že do
jednotlivých složek umístíme prvky náhodné číslo (0 <= x
< 1)
(rozsah náhodného
čísla je také 0 až 1).
Dalším parametrem příkazu pro kreslení
bodu je prvek tloušťka
pera . Je to číselná hodnota, udávající
kolik grafických bodů bude kreslený bod široký. Velikost
bodu budeme generovat náhodně, proto sem vložíme náhodné
číslo s parametrem 9, čímž zajistíme náhodné body o velikosti 1
až 9 grafických bodů (nulou se nemusíme zabývat, příkaz
pro kreslení bodu ji upraví na hodnotu 1).
Poslední dva prvky příkazu, horizontální souřadnice
bodu X a vertikální souřadnice bodu Y
,
určují místo, kam se bod vykreslí. Na obrázku výše vidíte
určování grafických souřadnic. Ničím se neliší od
číslování políček, jak jsme ho poznali v předešlých
kapitolách. Základní jednotkou souřadného systému Petra je jednotkový krok. Délka jednotkového kroku odpovídá šířce
políčka, počátek souřadnic je vlevo dole. Díky vyjádření
souřadnic desetinným číslem můžeme udávat souřadnice
políček, grafiky i sprajtů jednotně, bez nutnosti
vzájemných převodů.
Souřadnice k vykreslení bodu určíme
náhodně, jak to již známe z dřívějších kapitol, pomocí
náhodného čísla s parametrem šířky
popřípadě výšky
plochy. Výsledný
příkaz pro náhodné nakreslení bodu bude vypadat takto:
Program spusťte. Na ploše se začnou náhodně objevovat barevné puntíky různých velikostí. Vykreslování není příliš rychlé. Po každém bodu program ve smyčce chvíli čeká (55 ms), rychlost vykreslování je proto pouze 18 bodů za sekundu.
Teď je vhodná chvíle pozastavit se u
časování programu. Jak jsme si již dříve řekli, příkaz čekání
má, kromě vlastní funkce čekání, také funkci spolupráce s
ostatními programy (a také s jádrem systému Windows).
Znalejší uživatel si může systémovým programem Sledování systému ověřit, že program Grafika
zatěžuje počítač minimálně, a navíc je rychlost chodu
programu nezávislá na rychlosti počítače. Pro upřesnění -
příkaz čekání ve skutečnosti neznamená opravdovou prodlevu
o zadané délce, ale synchronizaci na vnitřní hodiny
počítače. Proto nezávisí rychlost programu na tom, jak
rychle se provedou příkazy mezi dvěma příkazy čekání.
Doplňte na zkoušku do příkazu čekání hodnotu 0. Po spuštění můžete pozorovat, že program teď chrlí velké množství bodů. Program již nečeká na časový krok, ale jede maximální rychlostí. Přitom po každém průchodu smyčkou ještě zajistí zobrazení plochy okna na displeji. To je další funkce příkazu čekání - zajištění zobrazování. Program totiž neví, ve které chvíli byly dokončeny všechny grafické operace a kdy je tedy vhodné okno zobrazit na displeji. Pokud by okno zobrazoval sám, mohl by je zobrazit ve chvíli, kdy je vykresleno pozadí hry, ale ještě ne postavy ve hře. To by se projevilo problikáváním pozadí pod postavami. Proto probíhá zobrazování na obrazovku ve chvíli čekání, kdy jsou zřejmě již všechny grafické operace dokončeny.
Tip pro optimalizaci programu: Program překresluje na obrazovku obdélníkový úsek části okna, kde byly provedeny změny. Chcete-li zvýšit rychlost programu, vykreslujte pouze změněnou část grafického výjevu. Opačným extrémem ovšem může být vykreslování velkého počtu malých částí výjevu, náročnější než vykreslení celého okna najednou.
Časování s hodnotou 0 je vhodné používat v situacích, kdy je buď potřeba vyšší výkon programu, nebo je časování po 0.055 sekundách příliš hrubé. Časování s 0 zajišťuje plynulé překreslování okna, maximální rychlost programu a ještě dostatečnou spolupráci se systémem Windows. Rychlost chodu programu teď již závisí na rychlosti počítače. Systémovým programem Sledování systému bychom zjistili, že program spotřebovává téměř celý výkon počítače a to i ve zdánlivě klidovém stavu.
Při další zkoušce časování programu
můžete zkusit příkaz časování úplně zablokovat
tlačítkem Vypnout . Když
teď program spustíte, uvidíte namísto teček barevný šum. V
této chvíli již program pracuje skutečně na plný výkon bez
jakýchkoliv prodlev. Možná si všimnete, že namísto
plynulého barevného šumu je obraz trochu trhavý. Program
totiž zajišťuje alespoň minimální překreslování okna na
displej. Není-li po dobu asi 0.2 sekundy použit příkaz
čekání, překreslí okno sám.
Vraťme se zpět ke grafickým příkazům.
Přidejte do hlavní smyčky programu i další grafické
příkazy - čára , obdélník
, vyplněný obdélník
, kružnice
, kruh
, koule
, trojúhelník
- a
zkuste jejich náhodné vykreslování. Pro kružnici, kruh a
kouli použijte náhodný poloměr 2. Výplň
vynechejte, zde by se moc neprojevila.
U příkazu výpis textu se
pozastavíme. Příkaz má více parametrů, než jste možná
zvyklí, ale nemusíte se jich bát. Parametry, které vás
nezajímají nebo které neznáte, nechejte prostě nenastavené,
použijí se jejich implicitní hodnoty. Význam parametrů text k výpisu
, barva pera
, horizontální souřadnice X
textu
a vertikální souřadnice Y textu
je
zřejmě poměrně jasný.
Novým prvkem je úhel orientace textu . Je
to úhel, o který je text otočen kolem levého dolního rohu.
Úhel se udává v radiánech, stejně jako všechny ostatní
úhly v Petrovi. Můžeme využít konstanty směru známé z
nastavování směru Petříka a Lucky. Bez zadání směru je
použit směr 0 (vodorovně zleva doprava).
Prvek výška znaků
určuje výšku znaků textu. Je udán v jednotkových krocích.
Bez zadání výšky bude výška znaků 0.5 (polovina výšky políčka).
Prvek relativní šířka znaků (1 = běžná)
představuje poměrné číslo, udávající kolikrát jsou znaky
širší než jejich běžná šířka. Hodnota 1 nastavuje běžnou šířku znaků. Větší
číslo než 1 nastaví znaky širší, při menším čísle
budou použity znaky užší. Zvláštní hodnotou je číslo 0. Číslo 0 nastaví doporučenou šířku použitého typu
znaků. Přibližně tato šířka odpovídá běžné šířce,
ale mírně se může lišit. Bez zadání šířky znaků je
použita hodnota 0, tedy doporučená šířka znaků.
Prvky tučný text , kurzíva
, podtržení
a přeškrtnutí
jsou logické přepínače a zapínají zvláštní efekty
písma. Bez zadání hodnoty jsou všechny přepínače vypnuté.
Přepínač patičky
zapíná patičky u znaků. Bez zadání je vypnutý. Přepínač
psací stroj
zapíná znaky s pevnou roztečí a pevnou šířkou. Při
vypnutém přepínači mají znaky proměnlivou šířku (I je užší než M). Bez
zadání je přepínač vypnutý.
Celý příkaz pro náhodný výpis textu vidíte na předcházejícím obrázku. Příkaz je dost dlouhý, proto je obrázek rozdělen na dvě části. Po vytvoření příkazu program zkuste.
Jednou z nejsilnějších stránek grafiky jsou zřejmě obrázky. Pomocí obrázků můžete zajistit vše, na co nestačí základní vybavení Petra. Vytvoříte pohyblivé postavičky, okno s animovanými tlačítky, pohyblivé pozadí hry a samozřejmě fotografie.
Příkazy a funkce pro práci s obrázky
najdete ve skupině grafika ,
podskupina obrázky
.
Základním příkazem je příkaz vykreslení obrázku
.
Kromě samozřejmých parametrů, jako je obrázek k vykreslení
a souřadnice obrázku, má příkaz ještě další parametry,
umožňující vykreslit pouze určitou část obrázku.
V našem zkušebním prográmku budeme náhodně vykreslovat nějaký obrázek. Než se pustíte do jeho kreslení, zkuste se podívat do Knihovny proměnných a funkcí. S Petrem dostáváte i velké množství obrázků. Otevřete skupinu [vzory]\Kresby. Zde jistě najdete obrázek, který se vám bude líbit. Při prohlížení obrázků vyberte kliknutím myši první obrázek ve skupině a potom popojíždějte pomocí kurzorových kláves výběrovým kurzorem dolů. V editačním okně uvidíte náhledy na jednotlivé obrázky.
Vybraný obrázek přetáhněte do Společných proměnných a
funkcí. Je-li to obrázek s
jednotnou barvou pozadí, můžete vylít pozadí obrázku
průhlednou barvou (použijte funkci Výplň ), tím zajistíte
zobrazení obrázku bez pozadí.
Příkaz pro náhodné vykreslení obrázku
vidíte na obrázku výše. Pro vykreslení obrázku s náhodnou
velikostí použijeme funkci změna velikosti obrázku .
Nová šířka obrázku bude náhodná a bude vycházet z
původní šířky obrázku zmenšené asi na polovinu. Novou
výšku obrázku nemusíme zadávat, bude automaticky úměrná
nové šířce.
Poznámka: Používáme raději větší obrázek a vyšší stupeň zmenšení. Dosáhneme tak vyšší kvality výsledného obrázku než při použití obrázku s menší velikostí.