Ошибка типа: Термин не определен?

Я сделал кадр as3, чтобы преднамеренно перезапустить мувиклипы, но я получаю опечатку для каждого мувиклипа, который я вызываю.

TypeError: Error #1010: A term is undefined and has no properties.

Я пытался с и без AS Linkage, но результат тот же.

Код:

    //Loop animation.
addEventListener(Event.ENTER_FRAME, function (Reiniciar) {
    if (MovieClip(root).Animacion.currentFrame==500){
        MovieClip(root).Animacion.gotoAndPlay(1);
        MovieClip(root).Personaje.gotoAndPlay(1);
        MovieClip(root).Personaje.Guy.gotoAndPlay(1);
    }
});

1 ответ

В этих строках кода:

if (MovieClip(root).Animacion.currentFrame==500){
            MovieClip(root).Animacion.gotoAndPlay(1);
            MovieClip(root).Personaje.gotoAndPlay(1);
            MovieClip(root).Personaje.Guy.gotoAndPlay(1);
        }

вы пытаетесь получить доступ к переменной с именем Animacion и другой переменной с именем Personaje, внутри которой есть еще одна переменная с именем Guy. Убедитесь, что все экземпляры мувиклипов, которые есть на этапе Flash, названы так, что на изображении вы видите имя класса и символа на вкладке свойств символа, а не имя экземпляра. Чтобы установить имя экземпляра, выберите мувиклип на сцене (появится синий контур) и посмотрите на вкладку "Свойства".

Кроме того, имена переменных обычно в нижнем регистре, верблюжий регистр (первая буква каждого слова в верхнем регистре) зарезервирован для имен классов для удобства чтения.

В этой строке:

//Loop animation.
addEventListener(Event.ENTER_FRAME, function (Reiniciar) {

Вы создаете анонимную функцию, которая прослушивает событие ввода кадра. Полагаю, вы хотели назвать свою функцию "Reiniciar", но в скобках указывается имя параметра Event, которое получает функция, а не имя функции.

Предпочтительный синтаксис для вашего кода будет:

import flash.events.Event;

//add event handler
addEventListener(Event.ENTER_FRAME, reiniciar);

//loop function      
function reiniciar(e:Event):void
{

   if (MovieClip(root).animacion.currentFrame==500)
   {
            //animacion is the instance name of the Symbol Animacion
            //and is placed in your main timeline
            MovieClip(root).animacion.gotoAndPlay(1);

            //there is a movieclip instance named personaje in your main timeline
            MovieClip(root).personaje.gotoAndPlay(1);
            //personaje has inside a movieclip instance named guy
            MovieClip(root).personaje.guy.gotoAndPlay(1);

        }
}

Это должно сработать, но я советую вам не злоупотреблять слушателями ENTER_FRAME, так как они довольно дороги с точки зрения производительности. Например, в этом примере, возможно, вам не нужно спрашивать каждый кадр, достигает ли "анимация" MovieClip своего кадра 500, думайте, что это похоже на раздражающего ребенка на заднем сиденье вашего автомобиля, кричащего "мы уже там? мы уже на месте?" каждые несколько секунд. Я предлагаю вам следовать некоторым учебникам для начинающих по ActionScript 3, чтобы привыкнуть к синтаксису и лучше ознакомиться с логикой кода.

Другие вопросы по тегам