本教程主要介绍用Flash制作一个敌人正在追击的动画游戏的方法。教程不是很难,只是sin和cos函数的应用。如果能应用的话,你会发现大部分游戏没有三角函数是做不出来的。
还有就是在一定范围内追求目标。
其实就是计算两点之间的距离d,加上一点判断再动。
RtABC,C=90度。A的对边叫做A. B的对边叫做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,加上一点判断。然后执行移动。
教程最后,以上是闪敌的追击动画教程(鼠标感应),希望对大家有所帮助!