addFrameScript работает в классе документов, полностью вылетает на временной шкале? - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть вопрос, я написал следующий тест как класс:

package 
{
    import flash.display.MovieClip;
    import flash.display.FrameLabel;

    public class FrameLabels extends MovieClip
    {
        public function FrameLabels ()
        {
            var labelsList:Array = currentLabels;

            for (var i:int = 0; i < currentLabels.length; i++)
            {
                if (currentLabels[i].name == "monday")
                {
                    addFrameScript (currentLabels[i].frame-1, mondayHandler);
                }
                if (currentLabels[i].name == "tuesday")
                {
                    addFrameScript (currentLabels[i].frame-1, tuesdayHandler);
                }
                if (currentLabels[i].name == "wednesday")
                {
                    addFrameScript (currentLabels[i].frame-1, wednesdayHandler);
                }
            }
        }

        private function mondayHandler():void
        {
            trace("at monday at frame " + currentFrame);
        }
        private function tuesdayHandler():void
        {
            trace("at tuesday! at frame " + currentFrame);
        }
        private function wednesdayHandler():void
        {
            trace("at wednesday! at frame " + currentFrame);
        }




    }
}

У меня есть метки кадров: понедельник вторник среда

Это прекрасно работает в классе документов, однако,когда я помещаю его в кадр 1 моей временной шкалы, происходит сбой Flash.

У меня есть действие остановки в последнем кадре, поэтому точка воспроизведения не должна запускать сценарий снова и снова, есть ли причина, по которой это происходит сбой?

Код временной шкалы:

var labelsList:Array = currentLabels;

for (var i:int = 0; i < currentLabels.length; i++)
{
    if (currentLabels[i].name == "monday")
    {
        addFrameScript (currentLabels[i].frame-1, mondayHandler);
    }
    if (currentLabels[i].name == "tuesday")
    {
        addFrameScript (currentLabels[i].frame-1, tuesdayHandler);
    }
    if (currentLabels[i].name == "wednesday")
    {
        addFrameScript (currentLabels[i].frame-1, wednesdayHandler);
    }
}


function mondayHandler ():void
{
    trace ("at monday at frame " + currentFrame);
}
function tuesdayHandler ():void
{
    trace ("at tuesday! at frame " + currentFrame);
}
function wednesdayHandler ():void
{
    trace ("at wednesday! at frame " + currentFrame);
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Поскольку фильмы SWF предназначены для потоковой передачи, ваш код в кадре 1 будет выполняться, как только будет загружен кадр 1. Если остальная часть вашего фильма еще не загружена, есть хорошее изменение, что либо свойство currentLabels, либо кадры, которым вы хотите назначить свои сценарии обработчика, еще не установлены (ноль), что приведет к сбою плеера.

Вы должны убедиться, что ваш скрипт выполняется только тогда, когда SWF полностью загружен. Либо экспортируйте все содержимое фильма в кадр 1 через панель свойств (чтобы все загружалось после загрузки кадра 1), либо (лучше) создайте цикл предварительной загрузки для проверки bytesLoaded / bytesTotal.

Это работает в классе документа, потому что конструктор вызывается после завершения загрузки SWF-документа.

0 голосов
/ 21 февраля 2011

Я принял ваше сообщение as и попытался имитировать вашу проблему (используя только код временной шкалы)

Что я нашел:

  • Ваш код на слое 1 кадра 1
  • Понедельник на слое 2, кадр 1, Вторник на слое 2, кадр 11, Среда на слое 2, кадр 21
  • stop () на слое 1 кадра 21

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

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