Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Мультикадровый мувиклип: обращение к клипам кадров (http://www.flasher.ru/forum/showthread.php?t=207286)

Fogflasher 06.04.2014 14:33

Мультикадровый мувиклип: обращение к клипам кадров
 
Вот тоже непонятная засада.

В библиотеке Flash IDE оздан многокадровый мувиклип.
У него 10 кадров. В каждом кадре расположено по одному мувиклипу.
В поле Instance Name каждого такого мувиклипа прописано: mc_1, mc_2, mc_3... mc10.

И теперь в одной из функций Класса имеем примерно вот такой код:

Код AS3:

var currName:String;
gotoAndStop(currFrame)//currFrame содержит номер кадра клипа-родителя.
currName = "mc_" + String(currFrame);
currClip = this.getChildByName(currName) as MovieClip; //currClip - ссылка на вложенный клип.
trace("TEST: currClip = ", currClip, " name = ", currClip.name);

И вот что странно, когда родитель переключён на 1-ый фрэйм, трэйс отрабатывает нормально:
Цитата:

TEST: [object MovieClip] name = mc_1
Но когда он переключается на второй, возникает ошибка:
Цитата:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
И если трейсить просто как currClip то выдается значение null.

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

Странно, что я делаю не так?
Или может в мультифрэймовом доступе есть некая специфика?

BornTOFree 06.04.2014 15:49

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

silin 06.04.2014 18:43

Вложений: 1
проблема не воспроизводится по описанию, все работает

Fogflasher 07.04.2014 09:31

BornTOFree,
Цитата:

Если я не ошибаюсь, то для доступа к свойствам объекта, все они должны находиться на первом кадре. Попробуйте.
Ну вот, тоже такое впечатление сложилось.
И кстати, может быть в этом и состоит смысл галочки Linkage: Export in first frame.

Цитата:

Почему вы используете такой подход? из библиотеки нет возможности мувики брать?
Просто я думал что это будет проще. К тому же, товарищ КореДум где-то писал, что так не нужно заморачиваться с удалением клипов, и со снятием листенеров.
Вот я и подумал такой вариант испытать. Но тут свои проблемы... Так что наверное придется, да, из массива брать клипы, через аддчайлд, ремувчайлд, и т.п.

silin,
Цитата:

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

silin 07.04.2014 09:36

Вложений: 1
пересохранил под cs3

silin 07.04.2014 09:41

упс, персохранил, а не проверил..
>> Может, кстати, это именно баг старых версий флэша.
действительно: при компиляции под 9ю версию - описанный вами баг, под 10ю - все норм

зы: имо, в любом случае, такой подход никакой простоты\удобства не дает, нет смысла с ним возится

Добавлено через 9 минут
обойти можно, обращаясь к клипам в следующем такте enterFrame, например так (применительно к моему примеру)
Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.utils.setTimeout;
 
 
        public class Symbol1 extends MovieClip
        {
 
                public function Symbol1()
                {
 
                        test(1);
                        test(2);
                        test(3);
 
                }
                private function test(currFrame:int):void
                {
                        gotoAndStop(currFrame)
                        setTimeout(delayedTest, 20);
 
                }
                private function delayedTest():void
                {
                        var currName:String = "mc_" + String(currentFrame);
                        var currClip:MovieClip = this.getChildByName(currName) as MovieClip; //currClip - ссылка на вложенный клип.
                        trace("TEST: currClip = ", currClip, " name = ", currClip.name);
                }
        }
 
}


Fogflasher 07.04.2014 10:02

silin, большое спасибо за прояснение версионности бага.
Говорил мне Wolsh выбросить cs3, а я вот тут всё... ; )

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

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

Добавлено через 1 час 41 минуту
UPD:

Погонял с delay, всё работает, спасибо.
Правда пару раз словил null-ошибку при быстром переключении фрэймов.
Поставил время задержки чуть выше чем FrameRate, и, похоже, это решило вопрос.

Добавлено через 4 часа 30 минут
UPD2
Однако, бывают null-баги и при чуть завышенных значениях делэй.
Но чем выше делэй, тем вероятность меньше. Но тогда больше вероятность дерганий в начальной фазе анимации клипа.

Так что да, похоже лучший подход это массив с клипами.


Часовой пояс GMT +4, время: 15:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.