אני אנסה להיות מפורט כמה שאפשר..
אז כך...
במקרה של לולאת התנועה שלך עדיף להסתכל במבט קצת יותר פיזיקלי (וזה טוב) כלומר אתה נותן לחץ וקטור שהוא מורכב ממכוח על ציר הY וכוח על ציר ה X.
אם נקרא לוקטור ההמהירות ההתחלתי של החץ speed הוא יראה כך בהתאמה לקוד שלך.
Using actionscript3 Syntax Highlighting
var speed
:Point =
new Point(dirX
*firePower
,dirY
*firePower
);
Parsed in 0.027 seconds, using
GeSHi 1.0.8.4
ולכן אחד הפרמטרים שתקבע הוא אחד הכוחות לפי הצירים. יותר נוח לקבע את הכוח על ציר ה X.
נתחיל בלחשב את Y.
בשלב הראשון לשם הפשטה נחשוב שגם היורה וגם המטרה נמצאים במישור 0.
כלומר צריך למצא פונקציה שתראה מתי החץ מגיע שוב ל 0.
1. נגדיר את זמן הטיסה של החץ כ t כלומר אם t = 5 אזי לולאת הקידום של החץ רצה 5 פעמים.
2. אם כך החץ יעלה t*y
3 החץ ירד למטה
((t+1)*t/2)*gravity
איך הגעתי לזה ? אתה בעצם מוסיף כל פעם עוד gravity למה שהיה קודם כלומר לאחר שלושה קריאות קידום החץ ירד ב ...
gravity + 2*gravity + 3*gravity
כלומר טור חשבוני פשוט.
אז מתי החץ יגיע חזרה למטה ל 0 ? כאשר 2 ו 3 והיו שווים.
((t+1)*t/2)*gravity = t*y
אז יוצא לנו ש ....
(t + 1)*gravity/2 = y
מיכאן ש אם נדע מיהוא t נוכל לחשב את y
את t קל מאוד למצא הוא פשוט המרחק על ציר ה X בין החץ למטרה (D) חלקי המהירות בכיוון X .
עכשיו תציב את D/X במקום t ותקבל את הנוסחא:
Y = ((D/X + 1)*gravity / 2) ;
אני מקווה שזה היה ברור.
אם החץ לא נימצא באותו גובה כמו המטרה פשוט צריך להוסיף את הגובה של החץ במצב ההתחלה לגובה של העליה שלו.
אגב תיקון קטן לקוד שהצגתה. הייתי מחליף את המיקום של שתי השורות האחרונות. הגרויטציה פועלת החל מהפריים הראשון

.
בהצלחה