Почему иногда не работают функции gotoAndStop, gotoAndPlay и nextFrame?
Бывает что нужно сделать простую флешку с внедренным видеороликом или другим увесистым контентом. И проще это выполнить на главной временной шкале, вставляя код в кадры. Обычно, в первом кадре делается прелоадер, а во втором (или начиная со второго) идет контент.
Вот в такой ситуации бывает загадочное явление – когда мы отслеживаем с помощью свойств loaderInfo.bytesLoaded и loaderInfo.bytesTotal состояние загрузки SWF файла, и когда файл полностю загрузился и мы пытаемся перейти на второй кадр, оказывается функции перехода на кадр не срабатывают. Epic fail? Глюк?
Оказывается все значительно проще. Контент во втором кадре, когда он много весит, может привести к задержке создания этого кадра после загрузки файла. А скрипт в первом кадре то работает. Получается, на момент вызова функции перехода на кадр, сам кадр еще не создан, поэтому переход не совершается.
Чтобы отследить, создался ли кадр, используем свойство framesLoaded класса MovieClip. Т.е. кроме проверки загруженности файла:
if(loaderInfo.bytesLoaded == loaderInfo.bytesTotal)
добавляем проверку наличия второго кадра:
if(loaderInfo.bytesLoaded == loaderInfo.bytesTotal && framesLoaded >= 2)
И когда такое условие будет выполнено, переход на второй кадр будет успешным.
Если видеролик полностью расположен на главной временной шкале, начиная со второго кадра, то можно в прелоадере считать только количество загруженных кадров, для отображения процента загрузки. Но часто бывает удобнее внедрить видео в мувиклип, а мувиклип расположить на втором кадре, тогда нужно считать количество загруженных байтов, для отображения процесса загрузки. Но и о проверке загрузки количества кадров следует не забывать.