本教程主要介绍用Flash制作一个敌人紧追不舍的动画游戏的方法。教程不是很难,只是sin和cos函数的应用。如果能应用的话,你会发现大部分游戏没有三角函数是做不出来的。
还有就是在一定范围内追求目标。
其实计算完两点间的距离D,加上一点判断,然后移动。
RtABC,C=90度。A的对边叫做A.BB的对边叫做B。
Sin1=a:c=a/c(对边比斜边多)
Cos1=b:c=b/c(邻边多于斜边)
Asin是sin的倒数。Sin是找边比。那么asin就是用比值表示的反角的值。
即asin(a:c)=1.
Acos是cos的倒数值。
更重要的是,使用了钩链定理。
即a*a b*b=c*c
:
d可以由(m.x-m.y)的平方加上(m.y-s.y)的平方和再平方求出。
然后用asin(abs(m.y-s.y):d)求1的值.也就是s1。
继续往下看:
S1是众所周知的.I是单位时间内移动的距离。因为sin1=a:c
设ss=sin(s1)
所以sin(s1)=a:c=a:i=ss,a=ss * i。
假设cos(s1)=b:c=b:1=cc,C=CC * I。
还有一点要注意。就是计算移动点的坐标。参考图2
(新加坡,新加坡)
去追那个红点。再次参考图,红点在蓝点右上方时,为——3354 (m.x=s.x m.y=s.y)。
蓝点移动到的点的坐标是。(s.x cc*i,s.y ss*i)
在右下角(m.x=s.x m.y=s.y)
移动的点(s.x cc*i,s.y-ss*i)
在左下方(m.x=s.x,m.y=s.y)
移动的点(s.x-cc*i,s.y-ss*i)
在左上方(m.x=s.x m.y=s.y)
后点坐标(s.x-cc*i,s.y ss*i)
源程序:
复制代码
代码如下:
stage . addevent listener(mouse event。MOUSE_MOVE,moves);
var I:int=int(q . text);
var mou:Sprite=new Sprite();//用于获取鼠标的坐标
var S1:Number=0;//角度
var d:Number=0;//两点之间的距离
addChild(mou);
函数移动(e:MouseEvent){
m . x=mou . mousex;
m . y=mou . mousey;
}
stage.addEventListener(事件。ENTER_FRAME,mm);
函数mm(e:事件){
d=math . sqrt(pf(ABS(s . x-m . x))pf(ABS(s . y-m . y)));
S1=math . asin(ABS(s . y-m . y)/d);
if(d=i){
if(m.x=s.x m.y=s.y){
s . y=math . sin(S1)* I;
s . x=math . cos(S1)* I;
}else if(m.x=s.x m.y=s.y){
s . y-=math . sin(S1)* I;
s . x-=math . cos(S1)* I;
}else if(m.x=s.x m.y=s.y){
s . x-=math . cos(S1)* I;
s . y=math . sin(S1)* I;
}else if(m.x=s.x m.y=s.y){
s . x=math . cos(S1)* I;
s . y-=math . sin(S1)* I;
}
}否则{
s . x=m . x;
s . y=m . y;
}
}
函数abs(n:数字){
return(math . ABS(n));
}//计算绝对值
函数pf(n:数字){
返回n * n
}//计算平方
//这里是设置速度的按钮
b1.addEventListener(MouseEvent。点击,se);
函数se(e:事件){
I=int(q . text);
}
还有就是在一定范围内追求目标。
其实就是计算两点之间的距离D,加上一点判断。然后移动。
教程最后,以上是追闪敌人的动画教程(鼠标感应)。希望能对大家有所帮助!