13. Začínáme s grafikou <<< Obsah >>> 15. Vybarvi si sám


14. Kreslíme "mišmaš"

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


13. Začínáme s grafikou <<< Obsah >>> 15. Vybarvi si sám