我有一个actionscript类,它加载到一个flash文件中,该文件有一些基于时间轴的活动。
当我尝试使用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 :(得分:1)
您的问题是您在函数内部调用了stop()
,但没有为该方法指定对象。因此,arcy正在运行stop()
命令并遇到问题,因为它是一个Sprite而不是MovieClip。
这是有问题的代码:
public function on_enter_frame() {
looper++;
if(looper >= sec_count){
clearInterval(intervalID);
stop(); // This is the problem.
}
您需要在MovieClip类型的对象上调用stop()。不幸的是,它看起来并不像你在代码中定义的那样 - 你没有强烈地输入你的许多变量,而且只有少数是Sprite类型的变量。 (事实上......您甚至没有在代码中导入flash.display.MovieClip
。)
这是一个快速测试;让你的arcy类扩展MovieClip。如果您不再收到错误,则需要在另一个对象上调用stop()
。
答案 1 :(得分:1)
当您在代码中调用stop()
时,您将在一个Sprite(“archy”)类中调用它。 Sprite没有时间轴(它们只是一个容器)因此没有stop()
方法。这就是你收到错误的原因。
你想停止什么时间表?只需拨打clearInterval()
,就可以正常停止间隔。
答案 2 :(得分:0)
我见过这种情况的唯一地方是尝试在不是.stop()
的DisplayObject上调用MovieClip
,就像尝试在{{1}上调用.stop()
一样或Sprite
。精灵和形状没有时间轴,无法停止,但是它不是标准方法丢失错误,而是动态抛出此警告。
您打算在Shape
上调用哪个对象?
答案 3 :(得分:0)
通过使用另一个答案所述的stop();
输入arcy类,它是一个sprite类型,并且没有stop函数,因为没有帧。
尝试此代码时
//also tried MovieClip(root).stop();
它失败了,因为arcy实例没有添加到舞台上。 为了访问该阶段,必须将类实例添加到该阶段。 真正的OOP方法是模块化这个类并让它发送一个事件。
// 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()
}
答案 4 :(得分:0)
你的类是一个Sprite(它没有时间轴)所以调用stop()会失败,因为Sprite.stop()不存在
你需要在动画片段上调用停止
someMovieClipReference.stop();
优雅......
if (someMovieClipReference is MovieClip)
someMovieClipReference.stop();