29-07-2005, 19:06
|
|
|
|
חבר מתאריך: 18.01.03
הודעות: 7,325
|
|
למען הסר ספק
בתגובה להודעה מספר 1 שנכתבה על ידי ``DarkLight`` שמתחילה ב "אין חוצפה למחשב?! יותר מידי פקודות בAS?"
רקרוסיה אינה דומה לולאה אינסופית, ותכף נסביר למה, אבל בשום פנים ואופן אנחנו לא מנהלים את תכנית הפלאש שלנו עם לולאה אינסופית !
כאשר אנחנו נותנים לפלאש לולאה אינסופית אנחנו גורמים לו "לשפוך מנוע". המנוע הרגיל של פלאש, שמקבל פקודות מה-AS, אבל גם צריך לבצע פעולות של ציור ומחיקה, הזזת הטיים-ליין, חישוב שכבות וזרימת מידע (ועוד המון דברים שהמנוע הזה עושה), לא מצליח להתפנות לשאר הפעולות והתכנית נתקעת. זאת בניגוד לשפות תכנות "רגילות" (AS היא למעשה סקריפט, מעין תסריט שמוגש לתוכנה) אשר משתמשים בהן פעמים רבות בלולאות אינסופיות.
הדרך לנהל תכנית בפלאש, אשר צריכה לבצע אלגוריתם כללי אשר חוזר על עצמו כל הזמן (הזז כדור, חשב אם התבצעה פגיעה, פעל בהתאם) אנחנו משתמשים באחד משני כלים אפשריים - הטיים-ליין ותכונת הפלאש לעבור מפריים לפריים כל זמן קצוב (פריים-רייט), או הפונקציה setInterval שמאפשרות לנו לקבוע למעשה פריים-רייט משלנו. אנחנו אורזים את האלגוריתם הכללי שלנו בתוך פונקציה (אשר תקרא לפונקציות שונות שיבצעו את הפעולות שאנחנו רוצים), ושולחים אותו ל-setInterval או מצמידים אותו באמצעות (onClipEvent(enterFrame.
רקורסיה היא גרועה עוד יותר, כי בעוד לולאה אינסופית מתרחשת בזמן אמת, את הרקורסיה צריך לחשב לפני שהיא מתבצעת (ככה זה ב-AS), ובנוסף כל קריאה לפונקציה נערמת בתוך מחסנית בזיכרון, ובשלב מסוים המחסנית הזאת מתמלאת.
_____________________________________
קפצתי לביקור
|