2011-12-02 70 views
0

我有一個動作類加載到一個Flash文件,其中有一些基於時間軸的活動。Actionscript 3停止()不工作

當我嘗試使用stop();功能和編譯該文件,我提出了一個錯誤:

Warning: 1060: Migration issue: The method stop is no longer supported. For more information, see MovieClip.stop().. 

這是爲什麼?

編輯:這裏是我的代碼,它繪製弧形畫布

package { 

    import flash.display.Sprite; 
    import flash.display.Shape; 
    import flash.events.MouseEvent; 
    import flash.events.Event; 
    import flash.utils.setInterval; 
    import flash.utils.clearInterval; 

    public class arcy extends Sprite { 

     var my_canvas:Sprite = new Sprite(); 
     var deg_to_rad = 0.0174532925; 
     var looper:int=0; 
     var sec_count:int=80; 
     var intervalID:int=0; 


     public function arcy() { 

      addChild(my_canvas);  
      var frequency = 6; 
      intervalID = setInterval(on_enter_frame,frequency); 

      my_canvas.graphics.lineStyle(40,0xCCCCCC,1,false,"normal", "none"); 
      //draw_arc(my_canvas,250,200,150,-200,-90,1); //final position 
      //draw_arc(my_canvas,250,200,150,-450,-90,1); //initial position 


     } 

     public function make_circle(increment) 
     { 

     //creating a new shape instance 
     var circle:Shape = new Shape(); 
     // starting color filling 
     circle.graphics.beginFill(0x52E700 , 1); 
     // drawing circle 
     circle.graphics.drawCircle(0 , 0 , increment*1.2); 
     // repositioning shape 
     circle.x = 250;         
     circle.y = 200; 
     // adding displayobject to the display list 
     addChild(circle); 

     } 

     public function draw_arc(movieclip,center_x,center_y,radius,angle_from,angle_to,precision) { 
      var angle_diff=angle_to-angle_from; 
      var steps=Math.round(angle_diff*precision); 
      var angle=angle_from; 
      var px=center_x+radius*Math.cos(angle*deg_to_rad); 
      var py=center_y+radius*Math.sin(angle*deg_to_rad); 
      movieclip.graphics.moveTo(px,py); 
      for (var i:int=1; i<=steps; i++) { 
       angle=angle_from+angle_diff/steps*i; 
       movieclip.graphics.lineTo(center_x+radius*Math.cos(angle*deg_to_rad),center_y+radius*Math.sin(angle*deg_to_rad)); 
      } 
     } 

     public function on_enter_frame() { 

       looper++; 
       if(looper >= sec_count){ 
       clearInterval(intervalID); 
stop(); 
//also tried MovieClip(root).stop(); 
       } 

       make_circle(looper); 
       my_canvas.graphics.clear(); 

       my_canvas.graphics.lineStyle(40,0x52E700,1,false,"normal", "none"); 
       draw_arc(my_canvas,250,200,150,270,270+looper*3,1); 

       my_canvas.graphics.lineStyle(40,0xCCCCCC,1,false,"normal", "none"); 
       draw_arc(my_canvas,250,200,150,-450+looper*3,-90,1); //initial position 

       my_canvas.graphics.lineStyle(40,0xFFFFFF,1,false,"normal", "none"); 
       draw_arc(my_canvas,250,200,150,-93+looper*3,-90+looper*3,1); //initial position 

       my_canvas.graphics.lineStyle(40,0xFFFFFF,1,false,"normal", "none"); 
       draw_arc(my_canvas,250,200,150,-90,-87,1); //initial position 

     } 
    } 

}

+0

你使用()後停止? –

+0

是的,我做過了 - 我將其添加到動作面板 – Ash

+0

嗯,我不知道該怎麼告訴你。這在AS3中一直適用於我。 –

回答

0

上我見過這種情況發生試圖調用.stop()上唯一的地方DisplayObject不是MovieClip,就像試圖在SpriteShape上調用.stop()。精靈和形狀沒有時間軸,也不能停止,但是標準方法沒有錯誤,它會動態地拋出這個警告。

你試圖撥打什麼對象stop()

+0

我正試圖在電影剪輯中調用停止,但我也正在導入一個類。可能需要對此做些什麼? – Ash

1

你的問題是你在你的函數中調用stop(),但是你沒有爲那個方法指定一個對象。因此,arcy正在運行stop()命令並遇到問題,因爲它是Sprite而不是MovieClip。

這是有問題的代碼:

public function on_enter_frame() { 

     looper++; 
     if(looper >= sec_count){ 
     clearInterval(intervalID); 
     stop(); // This is the problem. 
} 

你需要調用stop()的對象,類型爲影片剪輯上。不幸的是,它看起來好像你已經在你的代碼中定義了任何東西 - 你並不強烈地鍵入你的許多變量,而只有少數變量是Sprite類型的。 (事實上​​......你甚至還沒有在你的代碼中輸入flash.display.MovieClip。)

這是一個快速測試;讓你的arcy類擴展MovieClip。如果您不再收到錯誤,則需要在另一個對象上調用stop()

1

當你在你的代碼中調用stop()時,你在一個Sprite(「archy」)類中調用它。 Sprite沒有時間表(它們只是一個容器),因此沒有stop()方法。這就是你遇到錯誤的原因。

你想停止什麼時間表?只要您致電clearInterval(),您的間隔應該正常停止。

0

通過做stop();插入arcy類與其他答案一樣,它是一個類型的精靈,並沒有停止功能,因爲沒有框架。

當你嘗試這種代碼

//also tried MovieClip(root).stop(); 

它失敗,因爲沒有添加的阿西實例階段。 爲了訪問舞臺,類實例必須添加到舞臺上。 這樣做的真正的面向對象的方式是模塊化這個類並讓它派發一個事件。

// change this code 
looper++; 
if(looper >= sec_count){ 
    clearInterval(intervalID); 
    stop(); 
    //also tried MovieClip(root).stop(); 
} 


// to 
looper++; 
if(looper >= sec_count){ 
    clearInterval(intervalID); 
    this.dispatchEvent(new Event('DOSTOP')) 
} 



Now where you created the class instance add the event listener. 

var myArcy:arcy = new arcy() // always strongly type your vars. 
myArcy.addEventListener('DOSTOP', doStop) 


// and add the call back function for the listeners 
function doStop (e:Event):void{ 
    stop() 
} 
0

類是雪碧(這可是沒有一個時間表),所以調用的stop()自Sprite.stop()犯規存在

你需要調用停在一個影片剪輯將失敗

someMovieClipReference.stop(); 

是優雅...

if (someMovieClipReference is MovieClip) 
    someMovieClipReference.stop();