-
בשלב זה אתה יכול להבין שאתה כבר מגדיר
-
פונקצייה פרטית בכל זמן
שאתה רוצה להנפיש את התוכנית שלך
-
פונקציית הציור (draw function).
-
להזכירך, זו תוכנית
המכונית המונפשת שלנו שוב.
-
יש לה המשתנה הזה ששמו
הוא x, הוא מתחיל ב-11.
-
ואז בתוך פונקציית draw,
הוא מצייר את המכונית במשתנה x זה
-
ואז היא מוסיפה 3 למשתנה x זה כל פעם
-
ואלו התוצאות במכונית
-
שנעה 3 פיקסלים על המסך ברציפות.
-
אז, כך זה עובד.
-
אבל עכשיו כשלמדת איך להכין פונקציה בעצמך,
-
ייתכן שאתה תוהה,
מה לגבי פונקציית draw?
-
למה היא תמיד נקראת 'draw'?
-
האם היא פונקציה מותאמת אישית?
-
ואלו הן שאלות מאוד טובות.
-
אתה רואה, בספריית "ProcessingJS",
-
הפונקציה 'draw' היא אחת מתוך כמה פונקציות
מוגדרות מראש
-
מה שנותן לתוכניות שלנו יותר שליטה
על מה שקורה עם הקנבס.
-
פונקציה מוגדרת מראש היא פונקציה
שכבר הוגדרה
-
על ידי ספריית ה-ProcessingJS.
-
אבל לעיתים קרובות זה מתחיל
בהגדרה ריקה (של הפונקציה).
-
למשל, בספריית ה-ProcessingJS,
יש קוד שנראה כמו זה:
-
{} () var draw = function
-
ואז הקוד רק ריק. ריק לחלוטין.
-
עכשיו, אנחנו טוענים את ספריית
ה-ProcessingJS
לתוך כל תוכנית פה באקדמיית קהאן.
-
אז את הקוד הזה מעולם לא ראית.
-
אבל תאמין לי, הוא קיים.
-
עכשיו אני אעיר שהקוד יצא מפני
ש-ProcessingJS כבר עושה לנו את זה.
-
עכשיו כשאתה מגדיר שוב 'draw'
בתוכנית הפרטית שלך,
-
ההגדרה החדשה "דורסת"
את ההגדרה הישנה הריקה.
-
ועכשיו הפונקציה 'draw'
-
עושה למעשה דברים מרגשים,
כמו לצייר מכונית.
-
עכשיו השאלה היא, למה הפונקציה 'draw'
נקראת שוב ושוב?
-
טוב, בספריית ה-ProcessingJS
יש רק קוד
-
שמגדיר לדפדפן לעשות זאת ולחזור ולחזור,
-
שוב ושוב ושוב.
-
אנחנו צריכים לשנות לפונקציה 'draw' את
שמה, כי זה השם של הפונקציה
-
ש-ProcessingJS קוראת לו שוב.
-
אם נשנה את שמה, כמו
שנשנה את זה ל 'drawCar'.
-
ובהתחלה נקבל שגיאה 'ללא הגדרה',
אז אנחנו צריכים לומר 'var drawCar'.
-
תוכל לראות, אם משנים
-
שם ל-drawCar, אנחנו לא יכולים
לראות אנימציה כלשהי.
-
וזה כך מפני שהפונקציה לא נקראת עוד
-
כי היא לא נקראת 'draw'.
-
אז אנו צריכים לשים את הקוד
שאנו רוצים לקרוא לו
-
בתוך פונקציה שתהיה מאויתת 'draw' בדיוק.
-
אז אני רק אעשה זאת שוב,
ואני רק אקרא ל-'drawCar' מכאן.
-
אהה! קיבלנו את זה בחזרה.
-
בסדר, אז זה צריך להיות בשם 'draw',
-
וזה גם אומר שאתה חייב לקרוא
לפונקציה המותאמת אישית בשם 'draw',
-
אלא אם כן אתה רוצה לטפל בהם
באופן מיוחד, ולקרוא להם שוב ושוב.
-
וגם תזכור, אתה לא יכול ליצור
פונקציות רבות בשם 'draw'.
-
רק ההגדרה האחרונה תיחשב.
-
אם יש לנו 'rect' פה בפנים--
-
אז עכשיו אנו יכולים לראות שהמכונית
שלנו נראית שוב ושוב,
-
ורק ה'rect' נראה, כי רק ההגדרה
האחרונה נחשבת.
-
אז בואו ניפטר מזה.
-
עכשיו הפונקציה 'draw' היא לא רק
פונקציה מוגדרת מראש
-
שיש לה פעולות מיוחדות כאלו.
-
יש גם אוסף של פונקציות
-
כדי להגיב לאינטרקציות עכבר
ולחיצות במקלדת.
-
בואו נאמר שאנחנו רוצים שתהיה לנו תוכנית
שתצייר אליפסה צבועה
-
בכל מקום שהמשתמש מעביר את העכבר...
-
אז אנו יכולים לעשות זאת עם פונקציה כמו זו.
-
[הקלדה]
-
בסדר, או, נפלא.
-
עכשיו, הפונקציה הזאת נקראת שוב ושוב,
-
גם כשהמשתמש לא מזיז את העכבר,
כמו עכשיו.
-
והתוכנית הזאת, היא עובדת, היא עושה
מה שאנו רוצים שתעשה
-
היא מציירת את האליפסות היפות האלה
בכל רחבי המסך.
-
אבל כפי שמתברר, יש דרך טובה יותר
לעשות את אותו הדבר.
-
זה יעיל יותר.
-
אז אנחנו יכולים לשנות את 'draw'
ל-mouseMoved.
-
וזה עדיין עובד.
-
אתה רואה, הסביבה שלנו בודקת תוכניות
-
כדי לראות אם יש להן פונקציה מוגדרת
mouseMoved
-
ואם כך, הסביבה קוראת לפונקציה הזאת
בכל הזזת עכבר.
-
אבל היא לעולם לא תיקרא
אם המשתמש לא מזיז את העכבר.
-
אז לפני זה קראנו את הקוד
שבפונקציית 'draw'
-
כשאנחנו לא צריכים זאת,
שוב ושוב
-
ועכשיו, אנחנו קוראים את הקוד
של mouseMoved רק
-
כשהערכים של mouseX או mouseY משתנים.
-
אז התוכנית שלנו היא יותר יעילה,
וזה דבר טוב.
-
באופן כללי, אם אתה רק רוצה לשנות
את פלט התוכנית שלך
-
כשהמשתמש מזיז את העכבר,
אז זה יותר טוב לשים את הקוד
-
בתוך פונקציית 'mouseMoved'.
-
ויש עוד אוסף של פונקציות מוגדרות מראש
כמו זאת,
-
ואתה יכול לראות דוגמאות נוספות
ב-Documentation.
-
כמו mousePressed, mouseReleasedm
keyPressed, ועוד.
-
אז תזכור, אם אתה רוצה להשתמש
בפונקציה מיוחדת מוגדרת מראש,
-
כמו mouseMoved או draw, איית אותה נכון,
והשתמש בה נכון.
-
אם לא, תוודא שאתה מביא לפונקציות
המותאמות אישית שלך
-
שם חדש, ייחודי.
-
בהצלחה!