Проблемы с временной шкалой AS3 - PullRequest
0 голосов
/ 20 декабря 2008

Я пытаюсь получить динамический видеоклип с временной шкалы.

У меня есть временная шкала неизвестной длины с фрагментом фильма с именем экземпляра «бла» в одном из ключевых кадров (в данном случае предполагается 88).
Независимо от того, что я делаю, я не могу получить ссылку на указанный видеоклип.

Вот что я попробовал:

trace(blah); // null
trace(this.blah); // null
trace(getChildByName("blah")); // null

if(currentFrame == 88)
    trace(getChildByName("blah")); // null

for(var i:int=0; i<numChildren; ++i)
    trace(getChildAt(i));
/* Returns:
 * [object MovieClip]
 * [object Shape]
 * null
 * [object TextField]
 */

// Assuming the first movie clip is the correct one
trace(getChildAt(0).name); // instance?? where ?? are random digits, I'm expecting "blah"

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

Ответы [ 4 ]

0 голосов
/ 27 декабря 2008

Это асинхронная проблема, с которой мы столкнулись во Flash Player 9. Простой обходной путь - дождаться первой отправки события ENTER_FRAME после изменения фрейма ИЛИ использовать событие ADDED, чтобы узнать, когда ваш объект добавлен в список отображения. К счастью, эта проблема исправлена ​​в Flash Player 10.

http://www.bytearray.org/?p=236

0 голосов
/ 23 декабря 2008

Если вы загрузите SWF-файл, имена экземпляров внутри него не будут доступны напрямую, и (в зависимости от настроек вашей временной шкалы) то же самое можно сделать для перемещения с помощью gotoAndStop () или gotoAndPlay (). Это заставит вас реализовать обходной прием прослушивания Event.ADDED (в случае добавления SWF) или Event.ENTER_FRAME или Event.RENDER (для gotoAndStop / gotoAndPlay).

Я не знаю точных деталей, но комментарии к http://bugs.adobe.com/jira/browse/FP-43 содержат полезные ссылки.

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

0 голосов
/ 27 декабря 2008

LiraNuna,

Заранее извиняюсь - я не знаю, насколько вы опытны с Flash, поэтому мои предложения могут быть оскорбительными ...

Во-первых, как вы добавили видеоклип и присвоили ему имя? Вы добавили его через IDE?

Если это так, я часто допускаю одну ошибку: я выбираю неправильную вещь, когда называю что-то. Другими словами, вместо того, чтобы назначать имя клипу А, я назначаю его родителю клипа. Или, что еще хуже, я случайно назначил метку кадра вместо имени объекта.

Поведение, которое вы описываете (вместо имени «бла», мувиклип имеет имя «экземпляр ##») соответствует добавлению клипа через IDE, но не называет его - «экземпляр ##» является Схема именования Flash IDE по умолчанию для объектов, которые вы сами не назвали.

Итак, я бы дважды проверил, что вы на самом деле присвоили имя, которое, как вы думаете, у вас есть.

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

Ура, Matt

0 голосов
/ 20 декабря 2008

Если вы только что перешли к кадру 88, возможно, вы пытаетесь использовать его до его инициализации. Попробуйте добавить:

stage.addEventListener(Event.ADDED, onAdded);

function onAdded(event:Event):void
{
    trace("new object "+event.target);
    trace("new object name "+event.target.name);
}

и посмотрите, если / когда он будет создан

...