קוד:
function range (v_zer,rad,grav)
// מקבל מהירות התחלתית, מעלות ברדיאנים והתנגדות הכבידה ומחזיר טווח מקסימלי
{
x_val = Math.pow(v_zer,2) * Math.sin ( 2* (rad) )/grav;
return x_val
}
function time (x_val,v_zer,rad)
// מקבל מרחק אופקי, מהירות התחלתית ומעלות ברדיאנים ומחזיר את הזמן במרחק הנתון
{
sec = x_val / (v_zer*Math.cos(rad));
return sec;
}
function height_v (v_zer,rad,seconds,grav)
// מקבל מהירות התחלתית, מעלות ברדיאנים, זמן במרחק נתון והתנגדות
הכבידה ומחזיר את הגובה בזמן הנתון
{
gova = v_zer*Math.sin(rad)*seconds - (grav/2)*Math.pow(seconds,2);
return gova;
}
var v_zer:Number = 70 // מהירות התחלתית
var degree:Number = 0; // זווית במעלות
var grav:Number = 10; // התנגדות הכבידה
var i:Number = 0; // מרחק עד למרחק סופי
var seconds:Number = 0; // זמן
var rad:Number = degree*Math.PI/180; // זווית ברדיאנים
cannon._rotation = 0; // איפוס הסיבוב
var myListener:Object = new Object();
Key.addListener(myListener);
myListener.onKeyDown = function ()
{
if (Key.isDown(Key.LEFT)) // סיבוב שמאלה ושינוי הזוית בהתאם
{
if(degree>=360)
{
degree=0;
}else{
degree+=5;
}
rad = degree*Math.PI/180;
cannon._rotation = - degree ;
}
if (Key.isDown(Key.RIGHT)) // סיבוב ימינה ושינוי הזוית בהתאם
{
if(degree<=0)
{
degree=360;
}else{
degree-=5;
}
rad = degree*Math.PI/180;
cannon._rotation = - degree;
}
if (Key.isDown(Key.SPACE))
// יריית הכדור וחישוב מיקומו כל פריים ע"י קריאות לפונק' הנ"ל
{
var posX:Number = cannon.ball._x; // מיקומו האופקי של הכדור
var posY:Number = cannon.ball._y; // מיקומו האנכי של הכדור
var range_v:Number = range (v_zer,rad,grav);
_root.onEnterFrame = function ()
{
seconds = time (i,v_zer,rad);
_root.cannon.ball._x = i + posX ; // עדכון מיקום אופקי
_root.cannon.ball._y = posY - height_v (v_zer,rad,seconds,grav) ;
// עדכון מיקום אנכי
if (i<range_v)
{
i+=30
}
}
}
}