Причины, по которым MovieClip игнорирует код временной шкалы AS3 - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть собственный класс, который расширен от MovieClip. Класс в основном создает кнопку, которая использует метки кадров в MovieClip для перемещения между состояниями кнопок при отправке событий мыши. Каждое состояние (каждое длиной около 20 кадров) заканчивается временной шкалой stop().

Этот класс использовался во многих других проектах, но после определенного момента в моем текущем приложении любые кнопки, созданные как расширение моего класса кнопок, перестают выполнять код на временной шкале и просто воспроизводятся в цикле. Это включает в себя любые трассировки, помещенные во временную шкалу, но весь код в классе по-прежнему выполняется правильно, даже вызов gotoAndPlay при изменении состояния кнопки.

Самым странным является то, что ни одна из неправильно функционирующих кнопок на сцене не выдает никаких ошибок.

Что мне нужно, так это предложения о том, что может помешать любому объекту, расширяющему определенный класс, выполнять код временной шкалы без выдачи ошибки.

Спасибо!

ОБНОВЛЕНИЕ: Это все еще меня озадачило. Наши проекты обычно состоят из трех частей: легкий предварительный загрузчик, языковые и возрастные ограничения, а затем основное приложение. Каждый загружается в предыдущий, каждый раз используя текущий домен приложения. После загрузки основного приложения любой пользовательский экранный объект, который расширяет MovieClip (прямо или косвенно), будет игнорировать любой ActionScript непосредственно на своей временной шкале. Тем не менее, класс воспроизведения можно контролировать, хотя классом.

ОБНОВЛЕНИЕ 2: Это код в классе тестовых кнопок, который я сделал. Обратите внимание, что в этом ничего нет.

package com.test
{
    import flash.display.MovieClip;

    public class TestLabelButton extends MovieClip
    {
        public function TestLabelButton():void
        {

        }
    }
}

Обновление 3: Так что я сузил, но это странно. Кажется, что я могу просто загрузить свои языковые ворота в предзагрузчик, причем языковые ворота - это swf с пользовательским классом документов, расширяющим MovieClip. Однако после этого, если я загружу больше SWF-файлов, содержащих пользовательский класс документов, расширяющий MovieClip, это похоже на то, что все последующие экземпляры MovieClip его расширений теряют весь код на своих временных шкалах.

Ответы [ 4 ]

1 голос
/ 15 апреля 2011

Из того, что вы описываете, это звучит как когда вы запускаете SWF во FlashIDE с ошибками компиляции.Это просто зацикливает все кадры.Я уверен, что вы видели это до того, как обычные кнопки вспышки просто мерцают.

Вы пытались взять обидный MovieClip и поместить его в новый проект в одиночку и посмотреть, что произойдет?

0 голосов
/ 15 апреля 2011

Я считаю, что The_asMan находится на правильном пути. Я полагаю, что вы либо получаете ошибку времени выполнения, которая является причиной этого, либо вам удалось построить наследование объекта с помощью Flash IDE таким образом, что вы по существу «прототипировали» класс MovieClip. Если вы когда-нибудь были человеком AS2 или AS1, вы поняли, что я имею в виду. Поскольку ваш класс по существу пуст, я склоняюсь к варианту 2. Я полагаю, что вы каким-то образом переопределили класс MovieClip или создали его прототип с помощью пользовательского интерфейса Flash.

OR

Вы неправильно создали свой объект и поместили несколько экземпляров на сцену во время разработки. Как это:

enter image description here

Проблема, конечно, заключается в том, что вместо того, чтобы превратить этот объект библиотеки в КЛАСС ТИПА в ваш пользовательский класс с уникальным идентификатором, вы просто связали содержимое этого фрагмента ролика с одним классом. В этом случае создание нескольких экземпляров на сцене с использованием пользовательского интерфейса дизайна технически приведет к ошибкам, поэтому во время выполнения флэш-память, вероятно, автоматически компенсирует эту ошибку, объявляя эти объекты в свои собственные динамически сгенерированные классы, что уничтожит все ваши функциональные возможности в аномальный способ. Правильный способ сделать это - оставить экспорт для конфигурации actioncript как есть и создать экземпляры этого класса в коде, либо установить базовый класс объекта в свой пользовательский класс и присвоить ему уникальный идентификатор (если вы хотите макет в режиме конструктора, пример ниже).

enter image description here

Так что теперь Flash знает заранее, что вы создали объекты в режиме конструктора с определенным базовым классом, и знает, что вы хотите наследовать от него. В приведенном выше условии байт-код попадает на виртуальную машину и выдает: «WOA, вам нужно 10 копий одного и того же класса на сцене? Ну, это не сработает, поэтому здесь позвольте мне создать несколько общих объектов для вас с этими визуальными элементами». содержание в них. " Во всяком случае, я думаю, что повторяюсь, так что надеюсь, что это полезно. Просто теория. :)

0 голосов
/ 12 апреля 2011

Моя рекомендация состоит в том, чтобы спроектировать вашу кнопку мувиклипа таким образом, чтобы любая анимация, необходимая для состояний, происходила в их собственных клипах с их собственными временными шкалами зацикливания.Другими словами, каждое «состояние» вашей кнопки имеет один кадр на временной шкале вашего клипа кнопки - обычного воспроизведения или зацикливания на основной временной шкале.Все элементы управления головкой воспроизведения находятся в вашем внешнем классе и состоят только из * gotoAndStop * s для управления основной временной шкалой и, возможно, команд stop () и play () для запуска и остановки временных шкал анимационных клипов накадр состояния каждой кнопки.

Итог, не пытайтесь управлять головкой воспроизведения любого клипа из более чем одного места, потому что это означает, что вы приглашаете странные, часто трудно воспроизводимые ошибки конфликта управления.

Кроме того, ошибка в вашем фрейм-скрипте остановит Flash Player от выполнения фрейм-скриптов для этого клипа.Вы получаете ошибки или предупреждения во время компиляции?

0 голосов
/ 12 апреля 2011

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

В любом случае, убедитесь, чточто любой кадр, который вы вызываете через метку / имя кадра, не имеет stop() на этом кадре.Я сделал эту ошибку пару раз, когда у меня была метка кадра fRollOver в начале анимации rollOver, и когда вы gotoAndPlay("fRollOver"), она просто ничего не делает.

Еще одна вещь, которую я нашели я испытал это много раз, что если у вас есть stop() сразу на первом кадре, иногда вещи тормозят.Flash просто не нравится иногда, и я не могу этого объяснить.Это, безусловно, работает практически на всех моих проектах.Это может быть проблема с версией Flash.

...