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í.