-
Ето ни обратно при нашата програма за рисуване на Уинстън, но съм добавила текст към нея.
-
Искам да позиционирам Уинстън под всеки от тези надписи,
-
за да го покажа на всеки етап от живота му.
-
В момента той е навсякъде. Това е защото задаваме
-
на faceX и faceY стойности на произволни числа вътре във функцията.
-
Това, което искаме да кажем, е: "Ето точната позиция, където искам да нарисуваш този Уинстън".
-
Искам да мога да задам тази позиция всеки път, когато извиквам функцията,
-
точно както при ellipse() и rect().
-
Искам да сложа Уинстън тук, тук и един Уинстън тук, и един Уинстън тук
-
и не искам произволни места всеки път, когато извикам функцията.
-
За да направим това, ние трябва да зададем "параметри" на функцията
-
както в дефиницията на функцията ни – тук горе,
-
така и в извикването на функцията – тук долу, където всъщност я извикваме.
-
За drawWinston() подаваме faceX и faceY
-
и тя използва тези стойности, които сме ѝ подали, вместо да ги генерира произволно.
-
Нека като начало помислим какво бихме подали при извикванията на функцията тук долу.
-
Позиционираме Уинстъните под всеки надпис, така че вероятно ще искаме x и y на всеки
-
Уинстън да бъдат подобни на числата, подадени в text() функциите.
-
Може би 10 пиксела по-ниско по y. Първата би била 10 и 30,
-
после може би 200, 30... 10, 230... 200, 230
-
Същото като координатите на текста, само добавям по 10 към всеки у,
-
защото искам да е малко по-надолу.
-
Добре, но Уинстън не се е преместил. Причината е, че не сме казали на функцията си тук горе, че
-
ѝ подаваме параметри, затова тя все още използва тези произволни стойности.
-
За да кажем на тази функция "Вместо това, ще ти дадем тази нова информация",
-
трябва да дадем имена на параметрите вътре в тези скоби.
-
Ще ги наречем faceX и faceY, ще ги разделим със запетая.
-
Ще ги наречем така, защото вече ги използваме с тези имена вътре във функцията.
-
По този начин няма нужда да пренаписваме останалия код.
-
Но все още нищо не се е случило; Уинстън все още е навсякъде.
-
Ако видиш най-горната част на функцията ни,
-
ние все още задаваме произволни стойности на faceX и faceY върху старите.
-
Тоест всичко, което трябва да направим, е да изтрием тези редове...
-
Готово! Сега подаваме faceX и faceY на функцията
-
и тя използва стойностите, с които я извикваме тук.
-
Не позиционирах Уинстън много правилно, защото забравих, че текстът се позиционира
-
според горния си ляв ъгъл, а лицето се позиционира според центъра си.
-
Трябва малко да пооправя числата си тук, нали?
-
Трябва да променя стойностите на x на доста места... и тези също...
-
Всичко, което трябва да направя, е да променя стойностите, които подавам на функцията,
-
няма нужда да променям каквото и да е в дефиницията на функцията,
-
винаги ще приема стойностите, които ѝ подаваме.
-
Точно както с ellipse() и rect().
-
Позиционирах ги, но забелязвам, че Уинстън е прекалено голям.
-
Застъпва се, не се побира.
-
Сложила съм кода за нарисуването му във функция,
-
мога да променя размерите на всичките едновременно,
-
като променя един ред код, който рисува елипсата.
-
Ако го сложим на 190, да, Уинстън е на диета, на 190.
-
Супер! Сега се побира по-добре, после мога да продължа да променям кода,
-
докато го вкарам вътре, нали? Готино.
-
Нека направим обобщение на това какво прави този код. Той дефинира функция, наречена drawWinston(),
-
и казва, че тази функция приема две стойности, и ги нарича faceX и faceY
-
и тези стойности се приемат като променливи, които можем да използваме навсякъде във функцията си,
-
точно както използвахме променливите, които декларирахме най-отгоре.
-
След това можем да извикваме тази функция, когато поискаме, след като я декларираме,
-
можем да ѝ подаваме различни стойности, за да използва тези нови стойности всеки път.
-
Сега видяхте защо функциите са толкова готини. Можем да измисляме код, за който
-
смятаме, че би имало смисъл да използваме отново, но можем и да използваме параметри, за да кажем:
-
"Хей, ето нещо малко, което можеш да промениш в този код, да го настроиш".
-
Като рецепта е. Записваш основните инструкции
-
и ако осъзнаеш, че изведнъж трябва да нахраниш 4 Уинстъна вместо 1,
-
няма нужда да започваш отначало, само изменяш първоначалните инструкции
-
и умножаваш всичко по 4.
-
Сега можеш да започнеш да мислиш за рецептите в кода си! Вкусно!