2011-04-19 19 views
1

我試圖通過使用tweenmax和lineTo繪製線條,但閃光似乎有點困惑的東西的座標。線條也畫得有點不穩定。這裏是我的代碼:閃光as3與lineTo和tweenmax動畫線條

var childArray:Array = new Array(sC0,sC1,sC2,sC3); 
var curChild = 0; 

function drawLines(){ 

    for (var i=0;i<childArray.length;i++){ 

     if (i == curChild){ 
      var line:Shape = new Shape(); 
      line.graphics.lineStyle(5, 0xFF1C30, 1, false, LineScaleMode.VERTICAL, CapsStyle.ROUND, JointStyle.ROUND, 10); 
      addChild(line); 
      line.x = sP.x; 
      line.y = sP.y; 

      var drawer:Sprite = new Sprite(); 
      addChild(drawer); 

      TweenMax.to (drawer,1,{x:childArray[i].x,y:childArray[i].y,onUpdate:drawLine,ease:Expo.easeOut,onComplete:incChild}); 

      function drawLine():void { 
       line.graphics.lineTo(int(drawer.x), int(drawer.y)); 
      } 
     }  
    } 
} 

function incChild(){ 
    curChild++; 
    drawLines(); 
} 

drawLines(); 

但是,當我用這個,它繪製線條從正確的點,但它不吸引他們的實際X和SC0,SC1,等一切都顯得偏移的Y座標,在Y方向線條稍長。任何人都有這樣做的好方法,或者看看我的代碼中可能會出現什麼問題?

謝謝!

+0

我假定每個「S」是您正在試圖通過補間舞臺影片剪輯。如果是這樣,那麼's'剪輯的註冊點是否在每個剪輯的中心? – Chris 2011-04-19 22:40:08

回答

0

啊 - 我明白我做了什麼。與其說「line.x = sP.x」和「line.y=sP.y」的 - 我應該說:

line.graphics.moveTo(sP.x, sP.y); 
2

對於「不穩定線條」問題,您將「抽屜」點從Numbers轉換爲整數,因此它基本上將線條移動到最近的像素。不改變類型將有助於「解決」這個問題: line.graphics.lineTo(drawer.x, drawer.y));

對於點的偏移,如果在「childArray」對象在另一個容器中,您可能需要使用localToGlobal()準確地轉換點。

 
var mc:MovieClip = childArray[i]; 
var pt:Point = localToGlobal(new Point(mc.x, mc.y)); 

TweenMax.to (drawer,1,{x:pt.x,y:pt.y,onUpdate:drawLine,ease:Expo.easeOut,onComplete:incChild}); 

這也假設addChild()在你的例子是添加到舞臺或其他容器,其位置是(0,0)。如果不是,您可能需要使用globalToLocal()或兩者的組合。

+0

謝謝 - 是的 - 對於我將使用整數的行,但對於對象 - 所有東西都直接添加到舞臺上,沒有任何內容在父容器中,所以我不確定這是怎麼回事。 – mheavers 2011-04-20 13:20:47