בחזרה לעמוד הבית

פונקציות

 

בשיעור תלמדו איך להשתמש בפונקציות

  1. לקיצור סקריפט
  1. להחזרת ערכים לאחר חישוב
  1. כפעולות של movie clips

 

להורדת קבצי המקור

 

מבוא

 

שימוש בפונקציה שאנחנו מייצרים זהה בעקרון לשימוש בפונקציות מוכנות כמו chr,substring וכו' (הכוונה היא כאן לפונקציות שלא קשורות לאובייקטים כמו –Math.abs ודומיה ). אנחנו קוראים לפונקציה בצורה הבאה : myfunction(); . ניתן גם ליצור פונקציה שמכילה פרמטרים , אבל בזה נדון בהמשך . ההבדל בין הפונקציות הקיימות לבין פונקציות שמיוצרות על ידינו הוא שאנחנו יכולים לבצע דברים אחרים חוץ מלהחזיר ערכים (לדוגמא: number(x); מחזירה את הערך המספרי של num , ord(x) – מחזיר ערך מספרי של תו וכו') . פונקציות שנבנות על ידינו יכולות גם לבצע כל מה שנרצה שיש בו צורך בסקריפט שלנו .

 

הבדל נוסף שיש בין פונקציות שבנויות בפלאש לבין פונקציות שמיוצרות על ידינו הוא שהפונקציות ה-build in , ניתנות לקריאה מכל time line בצורה זהה , מכפתורים , מתוך mc ומתוך כל אובייקט משתמשים בסינטקס functionname(); לעומת זאת , לפונקציות שנבנות על ידינו יש time line שעליו הם נמצאות – לדוגמא ה-_root , ואם נרצה להשתמש בהם בכל מקום אחר , נצטרך להוסיף קישור ל-timeline , לדוגמא : _root.myfunction()  אם הפונקציה על ה-_root , או _root.ball.myfunction אם הפונקציה נמצאת בתוך instance – "ball" .

 

כתיבת הפונקציה

 

פונקציות נכתבות על keyframes . השלד של כל הפונקציות זהה :

Function myfunction(){

//code to act //                                            

}

המילה function היא מילה שמורה שחייבים להשתמש בה , אחריה כותבים את שם הפונקציה ואחריה פתיחה וסגירת סוגריים. שם הפונקציה יכול להיות כל מילה שרוצים – למעשה נהוג להשתמש בשמות ארוכים המתארים את פעולת הפונקציה כמו בשמות של symbols או שדות טקסט . ההגבלה היחידה היא שהשם יהיה מורכב ממילה אחת בלבד . כמו כן לא ניתן להשתמש בשמות של פונקציות שכבר קיימות בפלאש . במקרה של קבלת פרמטרים בפונקציה יש צורך להשתמש בשם זמני לכל אחד מהפרמטרים המתקבלים  , מופרדים על ידי פסיק , בתוך הסוגריים .בתוך הקוד של הפונקציה ניתן להשתמש בשמות האלה , לדוגמא :

function AddTwoNumbers(x,y){

return x+y;

}

במקרה הזה הפונקציה AddTwoNumbers מקבלת ערכים של שני מספרים – השמות x ו-y  הם סתמיים ומחברת אותם ומחזירה את התוצאה . אם נרצה להשתמש בפונקציה הזאת נכתוב :

Solution=AddTwoNumbers(20,30);

והתוצאה תהיה ש-solution מקבל את מה שהפונקציה מחזירה לו כלומר המספר הראשון פלוס המספר השני – כלומר 50 .

 

שימוש בפונקציות לקיצור תהליכים (subroutines)

 

הסוג הראשון של הפונקציה שעליה מדובר היא סוג ששונה מהפונקציות הקיימות בפלאש בזה שהוא לא מחזיר ערכים (בניגוד לפונקציה addtwonumbers שמחזירה ערך) . פונקציה לקיצור תהליך מטרתה הוא שנכניס לתוכה שלבים של מהלך מסויים ( עם או בלי פרמטרים נוספים שיתקבלו מהמשתמש ) והיא תעשה הכל על פי הסקריפט שהכנסנו לה מראש .

כאן יכולות להיות לנו שתי סוגים של פונקציות .

  1. פונקציות שלא מקבלות ערכים .
  1. פונקציות שמקבלות ערכים

 

פונקציות שלא מקבלות ערכים (fnc1.fla)

פונקציה שלא מקבלת ערך מבצעת בכל פעם שקוראים לה את אותה פעולה בדיוק .

לדוגמא :

ניצור פונקציה שפונה ל-4 movieclips בעלי שמות שונים ומעלימה אותם , ועוד פונקציה שמציגה אותם .

 

Function hide(){

_root.a._alpha=0;

_root.b._alpha=0;

_root.c._alpha=0;

_root.d._alpha=0;

}

הפונקציה הזאת יכולה לבצע דבר אחד בדיוק – להעלים את movieclips בעלי שמות a,b,c ו-d . לא ניתן להכניס ערכים אחרים , אם לדוגמא נרצה לתת שקיפות מסויימת לאובייקטים או שנרצה להעלים רק את a ולא את b  לא ניתן באמצעות הפונקציה הזאת . הפונקציה ההפוכה לה היא :

Function show(){

_root.a._alpha=100;

_root.b._alpha=100;

_root.c._alpha=100;

_root.d._alpha=100;

}

 

מתי נשתמש בפונקציות כאלה ?

כאשר נרצה לבצע פעולות קונקרטיות מסוג זה , לדוגמא מצב שבו לחיצה על כל  movie clip או לחיצת כפתור גורמת להעלמת כל האובייקטים . במקום לכתוב את כל הסקריפט הזה בכל אובייקט ניתן פשוט להשתמש בפונקציה , והיא תעלים או תציג את כל האובייקטים .

 

 

פונקציות שמקבלות ערכים(fnc2.fla)

 

בהמשך לדוגמא הקודמת , נניח שאני רוצה להעלים את אחד האובייקטים בלבד , ואני רוצה להשתמש באותה פונקציה בשביל כל אחד מהאובייקטים כלומר לא לכתוב :

Function hidea(){

_root.a._alpha=0;

}

Function hideb(){

_root.b._alpha=0;

}

וכו ' מכיוון שאז אני לא חוסך שום דבר , אלא לכתוב פונקציה אחת , שתוכל לקבל את שם ה-movie clip שאותו נרצה להעלים , ולבצע עליו את הפעולה .

צורת הכתיבה של פונקציות שמקבלות ערכים היא :

Function myfunction(x){

//do stuff with x//

}

תסתכלו גם על הדוגמא למעלה – פונקציית AddTwoNumbers .

 

הפונקציה שניצור השביל להעלים אובייקט מסויים היא :

Function hide(obj){

[obj]._alpha=0;

}

במקרה הזה יצרנו פונקציה , הכנסנו לתוכה את שם האובייקט שאנחנו רוצים להעלים והשתמשנו בשם הזה בשביל לבצע את הקוד הפנימי של הפונקציה .

השימוש בפונקציה לצורך העלמת movieclip – "a” יהיה :

Hide(a);

 

בואו נשפר קצת את הפונקציה הזאת . נניח שאנחנו לא רוצים להעלים את האובייקט לגמרי , אלא רק לתת לו ערך של שקיפות – נוסיף את הערך לפרמטרים המתקבלים ונשתמש בו בתוך הפונקציה , הפונקציה המשופרת תהיה :

Function hide(obj,num){

_root[obj]._alpha=num;

}

כאן אנחנו משתמשים בערך num כערך של השקיפות של האובייקט .

השימוש בפונקציה לצורך יצירת שקיפות 50 לקליפ b יהיה :

Hide(b,50);

 

 

יצירת פונקציות שמחזירות ערכים (fnc3.fla)

 

ניתן להשתמש בפונקציות של מנת להחזיר ערך למשתנה מסויים , ראו דוגמה AddTwoNumbers למעלה . דוגמאות טובות לפונקציות שמחזירות ערכים , הם כל הפונקציות המתמטיות – Math.abs(num) מחזיר את הערך המוחלט של מספר , Math.sine(num); מחזיר ערך סינוס של המספר וכו' .

צורת הכתיבה של פונקציות שמחזירות ערכים היא :

Function myfunctions(x){

//do something with x

return somevalue;

}

והקריאה לפונקציה מתבצעת תמיד בצורה הבאה:

Somevar = myfunction(somevalue);

אם ניקח דוגמא מפונקציות קיימות :

X= -50;

Y= Math.abs(x);

//y= 50;

 

לדוגמא , ניצור פונקציה שלוקחת סכום בדולרים והופכת אותו לערך בשקלים :

 

Function ConvertToShekel(sum){

Exchange=4.31;

Return sum*Exchange;

}

הפונקצייה מקבלת ערך מסויים ומכפילה אותו בנתון קבוע (פחות או יותר ...) ומחזירה את הערך הסופי , השימוש בפונקציה לבדיקה כמה שווים 20 דולר ,יתבצע בצורה הבאה :

 

Valueof20dolar=ConvertToShekel(20);

// Valueof20dolar=86.2;

 

פונקציות כפעולות של   movie clip(fnc4.fla)

 

 

ניתן גם לבנות פונקציות שמשפיעות על movie clip . השיטה לבניית הפונקציה זהה לזו שיצרנו עד עכשיו . הדבר השונה הוא שהפונקציות יהיו בתוך ה-timeline של ה-movieclip ונקרא להם רק דרך ה-movie clip .

 

לדוגמא :

אם נרצה שלחיצה על כפתור תגדיל movie clip ב- 10 אחוז בכל לחיצה , ניתן לכתוב את הפונקציה הבאה בתוך הפריים הראשון של ה-timeline של ה-movieclip .

 

Function increase(){

_xscale+=10;

_yscale+=10;

}

על מנת להפעיל את הפונקציה הזאת ניצור כפתור על ה-timeline הראשי שהפקודה שלו תהיה :

On(release){

mc.increase();

}

 

כמובן שאם רוצים ניתן לשפר את הפונקציה כך שתוכל להכיל גם בכמה אחוזים להגדיל או להקטין את האובייקט :

Function increase(num){

_xscale+=num;

_yscale+=num;

}