-
V tuto chvíli si asi uvědomujete,
-
že jste při animování pokaždé
používali jednu a tu samou funkci.
-
Jedná se o funkci "draw".
-
Pojďme si ji připomenout
na našem programu pro animaci auta.
-
Máme v něm proměnnou x
s počáteční hodnotou 11.
-
Uvnitř funkce "draw" se pak
u proměnné x nakreslí auto.
-
Poté program k proměnné x
pokaždé přičte hodnotu 3.
-
Výsledkem toho je,
-
že se auto nepřetržitě posouvá
po 3 pixelech přes celou obrazovku.
-
Takto to funguje.
-
Ale teď, když už umíte
vytvořit své vlastní funkce,
-
možná budete chtít vědět
o funkci "draw" něco víc.
-
Proč je vždy pojmenována "draw"?
-
Je to vlastní funkce?
-
Jsou to velmi dobré otázky.
-
V knihovně ProcessingJS uvidíte,
-
že funkce "draw" je jednou z
několika předdefinovaných funkcí.
-
Tyto funkce dávají našim programům větší
kontrolu nad tím, co se děje na plátně.
-
Předdefinovaná funkce je funkce,
-
která již byla definována
knihovnou ProcessingJS.
-
Ale obvykle začíná
jako prázdná definice.
-
Například v knihovně ProcessingJS
existuje kód, který vypadá takto:
-
"var draw = function ()"
-
A pak je úplně prázdný,
zcela prázdný.
-
Na Khan Academy načítáme knihovnu
ProcessingJS do každého zdejšího programu.
-
Sice tento kód nikdy neuvidíte,
ale věřte mi, existuje.
-
Tento kód teď zakomentuji,
protože ProcessingJS ho již pro nás dělá.
-
A když ve vašem vlastním programu
předefinujete "draw",
-
tak tato nová definice má přednost
před starou prázdnou definicí.
-
Nyní funkce "draw" dělá
velmi zajímavé věci.
-
Například kreslí auto.
-
Otázkou nyní je:
-
Proč je funkce "draw"
přivolávána opakovaně?
-
V knihovně ProcessingJS
je totiž také kód,
-
který nastavuje časovač prohlížeče a
funkci přivolává opakovaně.
-
Znovu a znovu a znovu.
-
Musíme pojmenovat funkci "draw",
-
protože to je název funkce,
kterou ProcessingJS volá opakovaně.
-
Co když funkci přejmenujeme
například na "drawCar".
-
Nejprve dostaneme neurčitou chybu,
měli bychom tedy napsat "var drawCar".
-
Takže teď vidíte,
-
že když přejmenujeme funkci na "drawCar",
tak už nevidíme žádnou animaci.
-
A to proto, že tato funkce
už není přivolávána opakovaně.
-
Jelikož již není
pojmenována jako "draw".
-
Musíme tedy kód,
který chceme volat opakovaně,
-
vložit dovnitř funkce
pojmenované přesně "draw".
-
Takže to udělám znovu,
a odtud přivolám "drawCar".
-
Tak a máme to zpět.
-
Čili funkce musí být
pojmenována "draw".
-
To také znamená, že byste neměli
pojmenovávat své vlastní funkce "draw".
-
Pokud tedy nechcete, aby byly použity
speciálně a přivolávány znovu a znovu.
-
Také si pamatujte, že nemůžete mít
více funkcí s názvem "draw".
-
Počítá se pouze poslední definice.
-
Dejme tomu, že bychom
tady uvnitř měli "rect".
-
Teď můžeme vidět,
že se naše auto už nekreslí.
-
Místo toho se kreslí pouze obdélník,
protože se počítá pouze poslední definice.
-
Pojďme to teď smazat.
-
Funkce draw není jedinou
předdefinovanou funkcí,
-
která funguje jinak.
-
Existuje spousta funkcí
pro reakci na myš a na stisknutí kláves.
-
Dejme tomu, že chceme program,
který nakreslí barevnou elipsu.
-
A to kdykoli, když
uživatel pohne myší.
-
Toho bychom mohli docílit s
následující funkcí.
-
Napíšeme fill, mouseX, mouseY, mouseY
a ellipse mouseX, mouseY, 10 a 10.
-
Dobře, oh, krásné.
-
Tato funkce je volána
znovu a znovu.
-
A to i když uživatel
nepohybuje myší.
-
Jako právě teď.
-
A tento program funguje,
dělá totiž přesně to, co chceme.
-
Maluje tyto pěkné elipsy
po celé obrazovce.
-
Ale jak se ukazuje,
-
existuje lepší a efektivnější způsob,
jak docílit toho samého.
-
Můžeme tedy změnit funkci "draw"
na "mouseMoved".
-
A stále to funguje.
-
Naše prostředí kontroluje programy,
aby následně zjistilo,
-
zda jsme definovali
funkci "mouseMoved".
-
A pokud ano, volá tuto funkci
kdykoli uživatel pohne myší.
-
Ale nebude se volat,
pokud uživatel nepohybuje myší.
-
Předtím jsme přivolali
kód ve funkci "draw".
-
A to i když jsme to nepotřebovali,
znovu a znovu.
-
A teď voláme tento kód
jen ve funkci "mouseMoved".
-
Pouze tehdy, když se hodnoty mouseX
nebo mouseY opravdu změní.
-
Náš program je tedy efektivnější,
a to je dobrá věc.
-
Obecně platí, že pokud chcete
změnit pouze výstup programu,
-
a to když uživatel
pohne myší,
-
pak je lepší mít kód
uvnitř funkce "mouseMoved".
-
A je tu spousta dalších
takto předdefinovaných funkcí.
-
V dokumentaci můžete
vidět další příklady.
-
Jako "mousePressed", "mouseReleased",
"keyPressed" a další.
-
Takže nezapomeňte, pokud chcete použít
speciální předdefinované funkce,
-
jako "mouseMoved" nebo "draw",
napište je přesně a použijte je přesně.
-
Pokud tak neučiníte,
-
pak se ujistěte, že své vlastní funkci
dáte nové a jedinečné jméno.