Flash如何制作敌人穷追不舍的追逐动画教程
這篇教程主要向大家介紹利用Flash制作敵人窮追不舍的追逐動畫游戲方法,教程不是很難,只是將sin,cos函數的應用罷了。會應用的話會發現很都游戲的制作都離不開三角函數。
還有的就是在一定的范圍內追逐目標。
其實是計算出兩點距離d后加一點判斷,然后再執行移動
Rt△ABC,∠C=90度。。。∠A所對的邊叫a..∠B的對邊叫b...
sin∠1=a:c=a/c(對邊比斜邊)
cos∠1=b:c=b/c(鄰邊比斜邊)
至于asin就是求sin的反值。。。sin是求邊的比。。。那么asin就是用比來反求角的值
即asin(a:c)=∠1..
acos就是反求cos的值。。。
還有要用到的是鉤股定理。。。
既a*a+b*b=c*c
?。骸 ?/p>
d就可以通過(m.x-m.y)的平方加上(m.y-s.y)的平方的和再開方來求出
然后用asin(abs(m.y-s.y):d)求出∠1...既s1的值...
繼續往下看:
s1已知....i就是在1單位時間內移動的距離。。。。因為sin∠1=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
(s.x,s.y)
要去追(m.x,m.y)那個紅點。。。再參照圖,當紅點在藍點的右上方時————即(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.addEventListener(MouseEvent.MOUSE_MOVE,moves);
var i:int=int(q.text);
var mou:Sprite=new Sprite();//用來得到鼠標的坐標
var s1:Number=0;//角
var d:Number=0;//兩點的距離
addChild(mou);
function moves(e:MouseEvent){
m.x=mou.mouseX;
m.y=mou.mouseY;
}
stage.addEventListener(Event.ENTER_FRAME,mm);
function mm(e:Event){
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;
}
}else{
s.x=m.x;
s.y=m.y;
}
}
function abs(n:Number){
return(Math.abs(n));
}//計算絕對值
function pf(n:Number){
return n*n;
}//計算平方
//以下是設定速度的按鈕
b1.addEventListener(MouseEvent.CLICK,se);
function se(e:Event){
i=int(q.text);
}
還有的就是在一定的范圍內追逐目標。。。。
其實是計算出兩點距離d后加一點判斷。。。然后再執行移動。。。
教程結束,以上就是flash敵人窮追不舍(鼠標感應)的追逐動畫教程,希望能對大家有所幫助!
總結
以上是生活随笔為你收集整理的Flash如何制作敌人穷追不舍的追逐动画教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Helm Chart 部署 Redis
- 下一篇: flash怎么制作发光文字效果