Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   обращение к объекту, расположенному не в 1 кадре (http://www.flasher.ru/forum/showthread.php?t=152654)

kaetano 21.03.2011 02:13

обращение к объекту, расположенному не в 1 кадре
 
Здравствуйте.
вдруг зависла вот на таком.

есть шкала, на ней то появляется то исчезает объект mapRussia.
есть слой label - с метками, и если они совпадают с кадром где появляется мой объект - то компилятор выдает ошибку - не видит объект.
Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
если ставить метку на кадр позже - то все нормально.
вот так:
[IMG]http://i041.***********/1103/a6/6efcf4a93bbb.jpg[/IMG]

вот обращение к объекту из класса:
Код AS3:

public function MapScene(){                        
        addEventListener(Event.ENTER_FRAME, onMyEnterFrame);
}
 
private function onMyEnterFrame(event:Event):void{                               
        var target_mc:MovieClip = event.target as MovieClip;
        if (target_mc.currentLabel == "blur") {       
                this.mapRussia.gotoAndStop("all");
        }
}


Александр Мостовой 21.03.2011 20:34

не совсем понятно что вы хотели, клип пока не появится в определнном кадре возвращает null, так как его нет да и у флеша есть глюки при обращении к именновоному клипу который твинится (он не всегда понимает, что это один и тот же обьект на уровне кода если копировать и вставлять кадры) Но в приведенном вами коде вообще не понятно зачем все это написано, т.к. target_mc и так веренет MapScene (это в АС2 имело смысл, т.к. у него была другая логика видимости обработчиков).

Словом если это таймлайн MapScene этот код идентичен то что в кадр "blur" вставить строчку mapRussia.gotoAndStop("all"); Может быть выхотели обойти глюк про который я говорил, тогда этот код можно было вешать внутри mapRussia и смтреть где наодится currentLabel у parent
акже его можно попробовать обойти
var mapRussia:MovieClip = getChildByName("mapRussia")

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

kseniya 21.03.2011 20:41

Может попробовать поместить во все кадры прозрачный шейп? о_О

i.o. 21.03.2011 21:05

Добавьте проверку:
Код AS3:

private function onMyEnterFrame(event:Event):void {
    var target_mc:MovieClip = event.target as MovieClip;
    if (target_mc && target_mc.currentLabel == "blur" && this.mapRussia) {
        this.mapRussia.gotoAndStop("all");
    }
}


kaetano 22.03.2011 00:42

Спасибо всем!
с проверкой вроде все работает.

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

NikolyA 22.03.2011 01:33

она не трудоемкая, она это правильный подход к решению проблемы

kaetano 22.03.2011 02:53

Цитата:

Сообщение от NikolyA (Сообщение 982625)
она не трудоемкая, она это правильный подход к решению проблемы

да, сижу потихоньку разбираюсь....


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

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