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

פקודת swap Depth

You must have HEBREW (ISO-LOGICAL) text encoding to see the hebrew in this page


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

כללי - פקודת swapDepths משמשת להחלפה בין עומק של מוביקליפים - בכל level ישנן עד 16000 "תת-שכבות" הנקראות depth - כאשר למשל אנחנו משכפלים מוביקליפ כלשהו, העותק המשוכפל נשלח ל - depth מסויים שאנחנו קובעים, ושם הוא נשאר מבחינת ה"עומק" שלו בתוך הסרט.

חשוב להבחין בין השניים: level משמש אותנו כאשר אנחנו משתמשים בפקודה loadMovie על מנת לייבא סרט חיצוני על גבי הסרט הקיים ואנחנו מעלים אותו לתוך שכבה נפרדת לגברי מהסרט הראשי ו - depth משמש כשכבות ביניים בין כל השכבות (levels) השונות.

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

הפקודה swapDepth מאפשרת לנו בעצם להחליף בין העומקים של 2 מוביקליפים מסויימים ובכך להביא את החלון שהיה חבוי לקידמת הבמה.


את הפקודה swapDepth ניתן למצוא תחת האובייקט movieClip שבתפריט Objects שבפאנל התכנות.





מבנה הפקודה הוא:
	mcBottom.swapDepths( 5 )		// החלפה לעומק מסויים
	mc1.swapDepths( mc2 )		// החלפה בין 2 מוביקליפים
הפקודה יכולה להיכתב בשתי צורות:

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

דרך א'
דוגמא לשיטה הראשונה נוכל לראות בקובץ המצורף תחת הלייבל "Simple". בדוגמא זו הכנתי מראש 4 מוביקליפים (בדוגמא הם זהים אך כמובן אפשר להשתמש בכל מוביקליפ ולא רק לשכפל אחד קיים), כאשר בכל מוביקליפ "חלון" יש שורת כותרת כחולה שלחיצה עליה מקפיצה את החלון לקדמת המסך ע"י שימוש בפקודה   this.swapDepths(100);    כלומר החלפת המוביקליפ שעליו לחצנו (this) לעומק קבוע וידוע מראש (100) כאשר אנחנו צריכים לקבוע מספר שאנחנו יודעים בוודאות שלא יהיה שום שכפול של מוביקליפ אחר שיעבור אותו.


דרך ב'
דוגמא לשיטה השניה קיימת תחת הלייבל "Advanced" שבקובץ המצורף - גם פה יכולנו לעשות שימוש במספר אחיד שגבוה מהמספר הכולל של החלונות, אבל במטרה להדגים את השיטה השניה, נצא מנקודת הנחה שהמטרה היא להחליף בין העומקים של החלונות הקיימים בלבד.

בקובץ שבדוגמא אנחנו שומרים את מספר החלון העליון בתוך המשתנה topNum, כאשר הוא מתחיל עם המספר 0, ובכל פעם שאנחנו מחליפים בין חלונות או מוסיפים חלון (שמוצג מייד בקדמת הבמה), המשתנה topNum מתעדכן.
בדומה לכך, גם המשתנה counter שמחזיק את המספר של החלונות הקיימים על הבמה (כדי שאם נרצה להוסיף או למחוק חלון, נוכל לדעת איך ללקרוא לו או את מי למחוק)

כאשר אנחנו מוספים חלון (ע"י לחיצה על הכפתור עם סימן הפלוס), אנחנו צריכים לשכפל חלון חדש (המקור נקרא win0), למקם אותו , לעדכן את מספר החלונות (counter) ולעדכן את המשתנה topNum
on (release) {
	duplicateMovieClip ("win0", "win" + (counter+1), (counter+1));	// שכפול חלון חדש
	counter = counter+1;					// עדכון מספר החלונות
	_root["win" + counter]._x = win0._x + counter*25;		// מיקום החלון לפי מספר החלון
	_root["win" + counter]._y = win0._y + counter*25;		// מיקום החלון לפי מספר החלון
	topNum = counter;						// topNum עדכון
}
ובאופן דומה , כאשר אנחנו מוחקים חלון (ע"י לחיצה על הכפתור עם סימן המינוס), אנחנו צריכים להסיר את החלון האחרון (בסיוע המשתנה counter) ולעדכן את מספר החלונות (counter) ולעדכן את המשתנה topNum במידה והוא היה החלון שנמחק.
on (release) {
	if (counter>0) {					// בדיקה שקיימים חלונות נוספים 
		removeMovieClip (_root["win" + counter]);	// הסרת העותק האחרון
		counter = counter-1;			// עדכון מספר החלונות
		if (topNum == (counter+1)) {			// בדיקה האם החלון שהסרנו היה הקדמי
			topNum = counter;			// במידה וכן topNum עדכון 
		}
	}
}
בלחיצה על שורה כותרת בכל חלון (הפס הכחול), מתבצעת ההחלפה עצמה -
	this.swapDepths( _root["win" + _root.topNum]);  // החלפה בין החלון שנלחץ  
							// לבין החלון הגבוה ביותר
	_root.topNum = this._name.substr(3);		// לאחר ההחלפה topNum עדכון



להורדת דוגמא - לחצו כאן
									בהצלחה
שיעור זה נכתב ע"י אופיר אברהמוב.
להערות והצעות : ofir@yuppys.com