0:00:00.757,0:00:02.376 V tuto chvíli si asi uvědomujete, 0:00:02.376,0:00:06.995 že jste při animování pokaždé[br]používali jednu a tu samou funkci. 0:00:07.652,0:00:09.451 Jedná se o funkci "draw". 0:00:09.801,0:00:13.406 Pojďme si ji připomenout[br]na našem programu pro animaci auta. 0:00:13.406,0:00:16.992 Máme v něm proměnnou x[br]s počáteční hodnotou 11. 0:00:16.992,0:00:22.648 Uvnitř funkce "draw" se pak[br]u proměnné x nakreslí auto. 0:00:22.648,0:00:26.757 Poté program k proměnné x[br]pokaždé přičte hodnotu 3. 0:00:26.757,0:00:28.378 Výsledkem toho je, 0:00:28.378,0:00:31.807 že se auto nepřetržitě posouvá [br]po 3 pixelech přes celou obrazovku. 0:00:32.747,0:00:35.351 Takto to funguje. 0:00:35.351,0:00:38.103 Ale teď, když už umíte[br]vytvořit své vlastní funkce, 0:00:38.103,0:00:42.203 možná budete chtít vědět [br]o funkci "draw" něco víc. 0:00:42.203,0:00:44.109 Proč je vždy pojmenována "draw"? 0:00:44.109,0:00:46.139 Je to vlastní funkce? 0:00:46.449,0:00:48.664 Jsou to velmi dobré otázky. 0:00:49.254,0:00:51.985 V knihovně ProcessingJS uvidíte, 0:00:51.985,0:00:56.132 že funkce "draw" je jednou z[br]několika předdefinovaných funkcí. 0:00:56.132,0:01:01.009 Tyto funkce dávají našim programům větší[br]kontrolu nad tím, co se děje na plátně. 0:01:01.009,0:01:03.169 Předdefinovaná funkce je funkce, 0:01:03.169,0:01:07.209 která již byla definována [br]knihovnou ProcessingJS. 0:01:07.209,0:01:11.149 Ale obvykle začíná[br]jako prázdná definice. 0:01:11.149,0:01:17.045 Například v knihovně ProcessingJS[br]existuje kód, který vypadá takto: 0:01:17.045,0:01:19.434 "var draw = function ()" 0:01:19.434,0:01:23.266 A pak je úplně prázdný,[br]zcela prázdný. 0:01:23.266,0:01:28.620 Na Khan Academy načítáme knihovnu [br]ProcessingJS do každého zdejšího programu. 0:01:28.620,0:01:32.823 Sice tento kód nikdy neuvidíte,[br]ale věřte mi, existuje. 0:01:33.977,0:01:40.349 Tento kód teď zakomentuji,[br]protože ProcessingJS ho již pro nás dělá. 0:01:42.329,0:01:45.308 A když ve vašem vlastním programu[br]předefinujete "draw", 0:01:45.308,0:01:50.259 tak tato nová definice má přednost[br]před starou prázdnou definicí. 0:01:50.259,0:01:53.862 Nyní funkce "draw" dělá[br]velmi zajímavé věci. 0:01:53.862,0:01:55.547 Například kreslí auto. 0:01:56.959,0:01:58.079 Otázkou nyní je: 0:01:58.079,0:02:01.686 Proč je funkce "draw" [br]přivolávána opakovaně? 0:02:01.686,0:02:05.964 V knihovně ProcessingJS[br]je totiž také kód, 0:02:05.964,0:02:11.111 který nastavuje časovač prohlížeče a[br]funkci přivolává opakovaně. 0:02:11.111,0:02:13.998 Znovu a znovu a znovu. 0:02:15.128,0:02:17.849 Musíme pojmenovat funkci "draw", 0:02:17.849,0:02:22.073 protože to je název funkce,[br]kterou ProcessingJS volá opakovaně. 0:02:22.663,0:02:27.543 Co když funkci přejmenujeme[br]například na "drawCar". 0:02:27.543,0:02:33.480 Nejprve dostaneme neurčitou chybu,[br]měli bychom tedy napsat "var drawCar". 0:02:34.510,0:02:35.567 Takže teď vidíte, 0:02:35.567,0:02:39.651 že když přejmenujeme funkci na "drawCar",[br]tak už nevidíme žádnou animaci. 0:02:39.651,0:02:44.692 A to proto, že tato funkce[br]už není přivolávána opakovaně. 0:02:44.692,0:02:47.244 Jelikož již není [br]pojmenována jako "draw". 0:02:47.738,0:02:51.366 Musíme tedy kód,[br]který chceme volat opakovaně, 0:02:51.366,0:02:55.912 vložit dovnitř funkce[br]pojmenované přesně "draw". 0:02:55.912,0:03:00.594 Takže to udělám znovu,[br]a odtud přivolám "drawCar". 0:03:00.594,0:03:03.957 Tak a máme to zpět. 0:03:05.177,0:03:08.249 Čili funkce musí být [br]pojmenována "draw". 0:03:08.879,0:03:12.970 To také znamená, že byste neměli[br]pojmenovávat své vlastní funkce "draw". 0:03:12.970,0:03:18.228 Pokud tedy nechcete, aby byly použity [br]speciálně a přivolávány znovu a znovu. 0:03:18.228,0:03:24.348 Také si pamatujte, že nemůžete mít[br]více funkcí s názvem "draw". 0:03:24.348,0:03:27.889 Počítá se pouze poslední definice. 0:03:27.889,0:03:31.770 Dejme tomu, že bychom[br]tady uvnitř měli "rect". 0:03:31.770,0:03:35.903 Teď můžeme vidět,[br]že se naše auto už nekreslí. 0:03:35.903,0:03:40.965 Místo toho se kreslí pouze obdélník,[br]protože se počítá pouze poslední definice. 0:03:40.965,0:03:42.576 Pojďme to teď smazat. 0:03:44.676,0:03:48.289 Funkce draw není jedinou[br]předdefinovanou funkcí, 0:03:48.289,0:03:50.499 která funguje jinak. 0:03:50.499,0:03:56.292 Existuje spousta funkcí[br]pro reakci na myš a na stisknutí kláves. 0:03:57.032,0:04:01.624 Dejme tomu, že chceme program,[br]který nakreslí barevnou elipsu. 0:04:01.624,0:04:04.276 A to kdykoli, když[br]uživatel pohne myší. 0:04:04.716,0:04:09.042 Toho bychom mohli docílit s[br]následující funkcí. 0:04:09.042,0:04:19.998 Napíšeme fill, mouseX, mouseY, mouseY[br]a ellipse mouseX, mouseY, 10 a 10. 0:04:19.998,0:04:23.255 Dobře, oh, krásné. 0:04:23.255,0:04:27.224 Tato funkce je volána[br]znovu a znovu. 0:04:27.724,0:04:29.576 A to i když uživatel [br]nepohybuje myší. 0:04:29.576,0:04:31.286 Jako právě teď. 0:04:31.766,0:04:34.703 A tento program funguje, [br]dělá totiž přesně to, co chceme. 0:04:34.703,0:04:38.568 Maluje tyto pěkné elipsy[br]po celé obrazovce. 0:04:38.568,0:04:39.984 Ale jak se ukazuje, 0:04:39.984,0:04:44.568 existuje lepší a efektivnější způsob,[br]jak docílit toho samého. 0:04:44.568,0:04:49.845 Můžeme tedy změnit funkci "draw"[br]na "mouseMoved". 0:04:52.095,0:04:54.477 A stále to funguje. 0:04:55.267,0:04:58.751 Naše prostředí kontroluje programy,[br]aby následně zjistilo, 0:04:58.751,0:05:00.754 zda jsme definovali[br]funkci "mouseMoved". 0:05:00.754,0:05:05.457 A pokud ano, volá tuto funkci[br]kdykoli uživatel pohne myší. 0:05:05.457,0:05:10.029 Ale nebude se volat,[br]pokud uživatel nepohybuje myší. 0:05:10.029,0:05:13.423 Předtím jsme přivolali[br]kód ve funkci "draw". 0:05:13.423,0:05:15.908 A to i když jsme to nepotřebovali, [br]znovu a znovu. 0:05:15.908,0:05:20.265 A teď voláme tento kód [br]jen ve funkci "mouseMoved". 0:05:20.265,0:05:23.292 Pouze tehdy, když se hodnoty mouseX [br]nebo mouseY opravdu změní. 0:05:23.292,0:05:28.183 Náš program je tedy efektivnější,[br]a to je dobrá věc. 0:05:28.183,0:05:30.968 Obecně platí, že pokud chcete[br]změnit pouze výstup programu, 0:05:30.968,0:05:33.369 a to když uživatel [br]pohne myší, 0:05:33.369,0:05:36.952 pak je lepší mít kód[br]uvnitř funkce "mouseMoved". 0:05:38.172,0:05:40.987 A je tu spousta dalších[br]takto předdefinovaných funkcí. 0:05:40.987,0:05:44.655 V dokumentaci můžete [br]vidět další příklady. 0:05:44.655,0:05:48.882 Jako "mousePressed", "mouseReleased",[br]"keyPressed" a další. 0:05:50.455,0:05:54.883 Takže nezapomeňte, pokud chcete použít[br]speciální předdefinované funkce, 0:05:54.883,0:05:59.244 jako "mouseMoved" nebo "draw",[br]napište je přesně a použijte je přesně. 0:05:59.244,0:06:00.630 Pokud tak neučiníte, 0:06:00.630,0:06:05.967 pak se ujistěte, že své vlastní funkci [br]dáte nové a jedinečné jméno.