Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как достучаться до child'ов Мувика, которые находятся не в первом фрейме таймлайна (http://www.flasher.ru/forum/showthread.php?t=122800)

Gogan 18.03.2009 20:44

как достучаться до child'ов Мувика, которые находятся не в первом фрейме таймлайна
 
Вложений: 1
Есть такая проблема : у меня есть мувиклип "main" который загружается на сцену. Этот мувиклип состоит из 3-х кадров, в которых также находятся дочерние мувиклипы . Так вот достучаться я могу только до того дочернего мувиклипа, который находится в первом кадре (и естественно до его чайлдов, если такие имеются). Как мне достучаться до дочернего мувиклипа , который находится например в третьем кадре основного мувика? Когда я пытаюсь это сделать , то ловлю эксепшн (типо пытаюсь обратиться к null object).

Исходник с тестом прилагается:

Я с флешем не очень знаком (работаю с Флексом), подскажите пожалуйста как я могу зафиксать эту проблемку ...

Заранее Благодарю.

silin 18.03.2009 21:42

могу только предложить посмотреть как и что
Код AS3:

private function onClickBtn3(event:MouseEvent):void
{
        main.gotoAndStop("anim3");
        addEventListener(Event.ENTER_FRAME, delayedAction);
 
}
 
private function delayedAction(evnt:Event):void
{
        trace( "main.obj_3_frame : " + main.obj_3_frame );
        if (main.obj_3_frame)
        {
                removeEventListener(Event.ENTER_FRAME, delayedAction);
                main.obj_3_frame.rotateObj.rotation = main.obj_3_frame.rotateObj.rotation + 30;
        }
 
}

ну и самому решить: а оно тебе надо, в смысле размещать какую-то логику в кадрах?

Gogan 19.03.2009 12:41

Аж стыдно что сам не догадался поставить задержку, конечно костыль, но думаю пойдёт :). silin огромное спасибо!

Дело в том, что я должен вызывать различную анимацию(смех, прыжки, бег и т.д.) загружаемых во Флекс аваторов (персонажей, которые сделана на Флеше). И заказчик просит , чтобы они были как можно проще реализованы, чтобы аниматор мог потом по моему примеру создавать других аваторов. Я видел как работает этот "аниматор", он реально знаком с Флешем на уровне создать шарик и переместить его на таймлайне с помощью Create Motion Tween в лучшем случае, большинство анимации тупо нарисовано в кадрах, а про знании хотя бы о существовании AS я вообще молчу. Так вот мой вариант реализации аватара им вроде понравился и понятен.
Я с флешем знаком не очень хорошо, поэтому не знаю как лучше организовать смену анимации , вот и выбрал движение по кадрам. Я так понимаю, что правильней было бы разбить анимацию на отдельные мувики и грузить их по мере необходимости на сцену , а предыдущих удалять?

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

Спасибо.

litebox 19.03.2009 13:51

если уж существует такая необходимость, то можно поступить так:
Код AS3:

addEventListener(Event.ADDED, eventFrameChange);

оно будет срабатывать каждый раз, когда произошло изменение кадра и содержимое добавлено.
Только в самом обработчике нужно будет анализировать e.target на предмет того, что добавлено, т.к. обработчик будет срабатывать на все элементы: на клипы, кнопки, графику и т.д.
Еще вариант, в нужном кадре делать dispatchEvent своего события, например AVATAR_ADDED, в классе подписаться на это событие и определить функцию, которая будет работать с этим клипом так, как будто клип находится в первом кадре. Но заставить с этим вариантом работать дизайнера - задача куда более сложная :)

Arif flasher 19.03.2009 13:55

Вложений: 1
Цитата:

Сообщение от Gogan (Сообщение 806825)

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

Спасибо.

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

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

Gogan 19.03.2009 14:17

Всем огромное спасибо за информацию, очень помогли ваши посты!
Попробую объяснить заказчику более правильный вариант реализации аваторов (думаю скорее придётся ему дать урок по Флешу и AS3 :) ).

Arif flasher 19.03.2009 15:19

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

Код AS3:

var btnArray:Array = [btn1_mc,btn2_mc,btn3_mc];
var loaded:Boolean = false;
 
for (var i:uint = 0; i<btnArray.length; i++)
{
        btnArray[i].addEventListener(MouseEvent.CLICK, loadAnimation);
        btnArray[i].buttonMode = true;
        btnArray[i].targetAnimation = "animation" + (i+1) + ".swf";
}
 
function loadAnimation(event:MouseEvent):void
{
        if (loaded)
        {
                ekran_mc.removeChildAt(1);
        }
 
        var req:URLRequest = new URLRequest(event.target.targetAnimation);
        var loader:Loader = new Loader();
 
        function fileLoaded(event:Event):void
        {
                percent_txt.visible = false;
                ekran_mc.addChild(loader);
                loaded = true;
        }
 
        function preload(event:ProgressEvent):void
        {
                percent_txt.visible = true;
                var percent:Number = Math.round(event.bytesLoaded / event.bytesTotal * 100);
                percent_txt.text = String(percent) + "%";
        }
 
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fileLoaded);
        loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, preload);
        loader.load(req);
}



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

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