Actionscript 3 stop () не работает - PullRequest
       0

Actionscript 3 stop () не работает

0 голосов
/ 02 декабря 2011

У меня есть класс actionscript, который загружается во флэш-файл с некоторой временной активностью.

Когда я пытаюсь использовать функцию 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

        }
    }

}

Ответы [ 5 ]

1 голос
/ 02 декабря 2011

Ваша проблема в том, что вы вызываете stop() внутри своей функции, но вы не указываете объект для этого метода. Таким образом, arcy запускает команду stop() и сталкивается с проблемами, потому что это Sprite, а не MovieClip.

Это проблемный код:

public function on_enter_frame() {

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

Вам нужно вызвать stop () для объекта типа MovieClip. К сожалению, это не выглядит так, как будто вы определили что-то в своем коде как таковое - вы не сильно набираете многие из ваших переменных, а из тех, которые есть, только некоторые имеют тип Sprite. (На самом деле ... вы даже не импортировали flash.display.MovieClip в свой код.)

Вот быстрый тест; сделайте свой класс Arcy расширенным MovieClip. Если вы больше не получаете сообщение об ошибке, вам нужно вызвать stop() для другого объекта.

1 голос
/ 02 декабря 2011

Когда вы вызываете stop() в своем коде, вы вызываете его в классе, который является спрайтом ("archy")У Sprite нет временной шкалы (это просто контейнер) и поэтому нет метода stop().Вот почему вы получаете сообщение об ошибке.

Какой график вы пытаетесь остановить?Ваш интервал должен правильно остановиться, просто позвонив по номеру clearInterval().

0 голосов
/ 03 декабря 2011

ваш класс - Sprite (у которого нет временной шкалы), поэтому вызов stop () завершится ошибкой, поскольку Sprite.stop () не существует

вам нужно вызвать стоп на видеоклипе

someMovieClipReference.stop();

быть элегантным ...

if (someMovieClipReference is MovieClip)
    someMovieClipReference.stop();
0 голосов
/ 02 декабря 2011

Делая stop(); в классе arcy, как указано в другом ответе, он относится к типу sprite и не имеет функции остановки, потому что нет кадров.

Когда вы попробовали этот код

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

Не удалось, так как экземпляр arcy не был добавлен в stage. Для доступа к сцене необходимо добавить экземпляр класса на сцену. Реальный ООП способ сделать это состоит в модульности этого класса и отправке ему события.

// 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 голосов
/ 02 декабря 2011

Единственное место, где я когда-либо видел это, - это попытка вызвать .stop() для объекта DisplayObject, который не является MovieClip, как попытка вызвать .stop() для Sprite или Shape. Спрайты и фигуры не имеют временных шкал и не могут быть остановлены, но вместо стандартного метода отсутствует ошибка, он динамически выдает это предупреждение.

Какой объект вы пытаетесь назвать stop() на?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...