2014-01-17 106 views
0

我正在嘗試創建一個屏幕保護程序,並在其內容中有一個讓我們稱之爲'主要魚'的游泳場所。我設法做了主要魚游泳的編碼部分。現在我已經添加了更小的魚,這是我能夠做到的主要魚類,但是我怎樣才能讓小魚停留在主要魚類的後面,因爲它們不會與主魚類或其他魚類相撞。這是我迄今所做AS3:避免碰撞

這是魚類(即下一個)

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.geom.Point; 

    public class Fish extends MovieClip 
    { 
     var speed:Number = 3; 
     var target:Point; 

     public function Fish() 
     { 
      // constructor code 
      addEventListener(Event.ENTER_FRAME, update); 
     } 

     function update(e:Event) 
     { 
      //Point fish at main fish 
      var dx = MovieClip(parent).mainfish01.x - x; 
      var dy = MovieClip(parent).mainfish01.y - y; 
      var angle = Math.atan2(dy,dx)/Math.PI * 180; 
      rotation = angle; 

      //Move in the direction the fish is facing 
      x = x+Math.cos(rotation/180*Math.PI)*speed; 
      y = y+Math.sin(rotation/180*Math.PI)*speed; 

      //Calculate the distance to target 
      var hyp = Math.sqrt((dx*dx)+(dy*dy)); 
     } 
    } 
} 

回答

0

設置最高距離,然後更新位置

function update(e:Event) 
    { 
     //Point fish at main fish 
     var dx = MovieClip(parent).mainfish01.x - x; 
     var dy = MovieClip(parent).mainfish01.y - y; 
     var angle = Math.atan2(dy,dx)/Math.PI * 180; 
     rotation = angle; 


     //Calculate the distance to target 
     var hyp = Math.sqrt((dx*dx)+(dy*dy)); 

     // calculate based on size 
     var minDist = 10; 
     if(hyp > minDist){ 
      //Move in the direction the fish is facing 
      x = x+Math.cos(rotation/180*Math.PI)*speed; 
      y = y+Math.sin(rotation/180*Math.PI)*speed; 
     } 
    } 
+0

前檢查的距離你不應該計算真正的距離,而是使用距離的平方,因爲這樣你可以避免計算一個平方根,這是一個很昂貴的函數,但是對於幾條魚,你不會注意到有什麼不同。 – Daniel

+0

謝謝丹尼爾,它像一個魅力。最近我發現了一些看起來非常棒的轉向行爲。我只需要坐下來研究它,但是謝謝你。 – Saf