Причины, по которым MovieClip игнорирует код временной шкалы AS3

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

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

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

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

Спасибо!

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

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

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

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

        }
    }
}

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


person shanethehat    schedule 08.04.2011    source источник
comment
Я видел, как это происходит, когда я перемещаю объект по сцене, а также меняю свойства, такие как x и y, в коде.   -  person Mims H. Wright    schedule 09.04.2011
comment
Во время создания экземпляров некорректно функционирующих объектов никаких других действий не происходит.   -  person shanethehat    schedule 12.04.2011
comment
Мне нужно увидеть вашу установку, чтобы точно диагностировать это. Всевозможные проблемы могут возникнуть в результате конфликта сценариев кадра с кодом класса, который также пытается управлять головкой воспроизведения. Как правило, лучше избегать ЛЮБОГО кода временной шкалы в клипе, которым вы собираетесь управлять извне. Особенно проблематичными и трудными для воспроизведения являются ошибки, которые возникают только тогда, когда ваш класс play () или gotoAndPlay () конфликтует с директивой на временной шкале, так что у вас в основном есть шанс 1 в количестве кадров на воспроизведение ошибки.   -  person Adam Smith    schedule 12.04.2011
comment
К сожалению, я не могу поделиться кодом в его нынешнем виде. Я понимаю, насколько это полезно! Я могу подтвердить, что создаваемые мной настраиваемые объекты не отменяют ни один из методов MovieClip или его предков, и единственный код временной шкалы - это несколько вхождений stop().   -  person shanethehat    schedule 12.04.2011


Ответы (4)


Судя по тому, что вы описываете, это звучит так, когда вы запускаете SWF-файл во FlashIDE с ошибками компиляции.
Он просто зацикливается на всех кадрах.
Я уверен, что вы видели это до того, как обычные кнопки вспышки просто мерцают.

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

person The_asMan    schedule 14.04.2011
comment
Я считаю, что из всех ответов ты здесь лучше всех на правильном пути. - person ; 15.04.2011
comment
Это именно то поведение, да, хотя после этого все еще можно получить контроль над временной шкалой, и ошибки не отправляются. - person shanethehat; 15.04.2011
comment
Что вы подразумеваете под восстановлением контроля над временной шкалой впоследствии? и вы уже пытались вставить оскорбительный фрагмент в новый проект? - person The_asMan; 15.04.2011
comment
Я собираюсь присуждать здесь очки. В конце концов я создал новый проект и начал добавлять все элементы старого проекта один за другим. В конце концов, все это было добавлено и работало без ошибок, так что я предполагаю, что в моих FLA произошло какое-то повреждение. - person shanethehat; 02.05.2011

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

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

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

person Daniel Carvalho    schedule 12.04.2011
comment
Я разбил свои тесты на простой символ MovieClip, содержащий 30-кадровую анимацию с stop() на кадре 5. Он связан с классом, расширяющим MovieClip, но в остальном пустым. Анимация воспроизводится в цикле и не учитывает stop() в кадре 5. - person shanethehat; 12.04.2011
comment
Мне, вероятно, нужно было бы увидеть код в вашем классе, который расширяет MovieClip, чтобы помочь в дальнейшем. На этом этапе вы также можете поделиться кодом, чтобы люди могли помочь вам как можно лучше. - person Daniel Carvalho; 13.04.2011

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

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

Кроме того, ошибка в сценарии кадра не позволяет проигрывателю Flash Player выполнять сценарии кадра для этого клипа. Получаете ли вы ошибки или предупреждения во время компиляции?

person Adam Smith    schedule 12.04.2011
comment
Комментируя ответ Даниэля Карвалью ниже, я понял, что это влияет не только на мои пользовательские кнопки, но и на любой объект, расширяющий MovieClip. Дизайн кнопок до сих пор подходил для многих приложений, а поскольку структура нашего приложения не изменилась, я даже не знаю, где искать. - person shanethehat; 12.04.2011

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

ИЛИ

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

введите описание изображения здесь

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

введите описание изображения здесь

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

person Community    schedule 15.04.2011
comment
Я на самом деле много играл с этим и сузил его до использования классов документов, которые расширяют Movieclip, и, как вы говорите, это как если бы это было перезаписано определением MovieClip в applicationDomain. Проблема в том, что я не могу объяснить, почему это происходит, поэтому не знаю, как ее решить. - person shanethehat; 15.04.2011
comment
Основываясь на ваших комментариях о том, что вы больше не можете делиться пониманием проблемы, предоставляя код / ​​файлы, я бы сказал, что пора отменить этот вопрос и, возможно, даже удалить его. - person ; 15.04.2011
comment
Просто потому, что без дополнительной информации невозможно сделать ничего, кроме предположений. - person ; 15.04.2011
comment
К сожалению, он не перезаписывает MovieClip, свойства и методы все еще доступны, просто он уничтожает любой код на временной шкале. - person shanethehat; 15.04.2011
comment
Возможно, вы правы, мне нужно найти время, чтобы построить работающую модель, которую я могу показать публично. Я надеялся, что это могла быть проблема, с которой кто-то уже столкнулся. - person shanethehat; 15.04.2011
comment
ppFace должен расширять poo.pie.Butt - person ansiart; 15.04.2011
comment
@DanielH рофл кто-то заметил! @shane, поэтому, когда вы говорите код на временной шкале, вы имеете в виду код, который находится на временной шкале ВНУТРИ объекта (ов) вашей библиотеки? - person ; 16.04.2011
comment
Внутри объектов библиотеки и на шкале времени загруженного swf. - person shanethehat; 18.04.2011
comment
Вы можете прислать мне файлы? Я считаю, что это то, что я сказал, вы создали экземпляры класса, переопределяющие мувиклип / прототипирование над ним или что-то в этом роде. Если вы можете отправить мне файлы в частном порядке, проверьте мой контактный NFO в моем профиле, дайте мне знать. Если я посмотрю на них и выясню, в чем проблема, я обновлю ответ, чтобы описать характер проблемы для всех остальных. - person ; 18.04.2011
comment
Я ценю это предложение, но я не являюсь владельцем кода и не могу получить разрешение поделиться им. - person shanethehat; 19.04.2011