Форум 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=150367)

in4core 10.02.2011 15:51

Передача данных между флешками имеющими свои документ классы
 
Собственно вопрос видимо обсуждался сто раз, но толкового ответа не увидел.

Основная флешка ( Main Class)
ПОдгружаемая ( Sub Class)

Делаю так, в подгружаемой создаю статическую перменную например DATA
А в loader при COmplete пишу :
Код AS3:

e.target.content.DATA = '222';

В подгружаемой после addedToStage
Код AS3:

trace(DATA);

Выводит undefined, однако если в Complete сделать трейс :
Код AS3:

e.target.content.DATA = '222' ; trace(e.target.content.DATA) // 222

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

И второй не понятный момент - делаем просто трейс из второй флешки,
Код AS3:

trace(root) // Sub Class

как ни старайся. У меня есть сомнения насчет _lockRoot как было в AS2/

alatar 10.02.2011 16:02

Цитата:

И второй не понятный момент - делаем просто трейс из второй флешки,
root у каждой флешки свой.

zuxul 10.02.2011 16:02

У Вас документ класс случайно не динамический? Если да, то такая штука -
Цитата:

Сообщение от in4core
Код AS3:

e.target.content.DATA = '222' ; trace(e.target.content.DATA) // 222


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

alatar 10.02.2011 16:05

Цитата:

В подгружаемой после addedToStage
А где вы ее добавляете на сцену?

in4core 10.02.2011 16:06

что значит динамический? dynamic public class ? Нет.

У меня задача, из одной флешки передать строку в другую. Обе флешки как я уже сказал имеют свой документ класс и наследуются от спрайта. Как передать то?

alatar 10.02.2011 16:08

Цитата:

Как передать то?
Ну так вы ее передали. Кстати зачем тут статик?

in4core 10.02.2011 16:08

@alatar
Методика такая :
Код AS3:

addChild(loader);
// здесь я не могу написать loader.content.DATA = '222'  и это логично
loader.contentLoaderInfo.addEventListener(Event.COMPLETE , comp)
function copm(e:Event) {
  e.target.content.DATA = '222';
}

Добавлено через 1 минуту
@alatar не совсем так. Дело вот в чем. Если бы я ее передал мне трейс выдал ее сразу после эддедтостейдж в конструкторе

Bgg 10.02.2011 16:10

А интерфейс тут не поможет? -.0

alatar 10.02.2011 16:11

Цитата:

@alatar не совсем так. Дело вот в чем. Если бы я ее передал мне трейс выдал ее сразу после эддедтостейдж в конструкторе
С чего вдруг?. Флешка загрузилась, ее добавили на сцену, сработал ADDED_TO_STAGE, послали событие COMPLETE, присвоили переменную.

zuxul 10.02.2011 16:12

Статическая переменная - это переменная класса. Сначала, нужно взять класс, а потом и переменную...попробуйте так -
Код AS3:

loader.loaderInfo.applicationDomain.getDefinition('Имя документ класса').DATA


in4core 10.02.2011 16:12

Вот полный код считай
Основная флешка
Код AS3:

private function risC(e:Event) {
                        var lom:Loader = new Loader();
                        lom.load(new URLRequest('ris.swf'));
                        lom.contentLoaderInfo.addEventListener(Event.COMPLETE, wi)
                        addChild(lom)
                }
                private function wi(e:Event) {
                        e.target.content.DATA = '6666666';
                }

Подгружаемая

Код AS3:

public function RisMain() {
                        if (stage) construct(null)
                        else this.addEventListener(Event.ADDED_TO_STAGE, construct);
                }
 
                private function construct(e:Event = null):void
                {
                        this.removeEventListener(Event.ADDED_TO_STAGE, construct);
                        trace(DATA); // undefined  а надо 6666666
 
 
                }


alatar 10.02.2011 16:17

Сделайте в SubClass геттер/сеттер для data и не занимайтесь ерундой со статичными переменными и ADDED_TO_STAGE.

Gaen 10.02.2011 16:19

Статическая переменная - свойство класса. Вы же устанавливаете свойство у объекта.
Сделайте переменную нестатической, и все заработает.

in4core 10.02.2011 16:22

Gaiker - если прокатит респект Вам.
@alatar думаю да вы правы. сеттер пойдет

Добавлено через 4 минуты
Gaiker ваш вариант не работает. Будем использовать сеттер. Спасибо за ответы

Gaen 10.02.2011 16:39

Вложений: 1
Рабочий пример. И да простит меня Всевышний за код в кадрах.

in4core 10.02.2011 16:41

не простит)))

Saulot 10.02.2011 16:49

zuxul правильно сказал, e.target.content - это объект корневого класса загружаемой флешки.
А статики нужно в сам класс писать. Если не хотите привязываться к имени, можно использовать

Код AS3:

e.target.content['constructor'].DATA='222'


in4core 10.02.2011 17:03

Дело в том что я лоадер раньше добавлял чем заносил перменную, понял свою ошибку. спасибо

dimarik 11.02.2011 00:59

Цитата:

Сообщение от in4core (Сообщение 972319)
Собственно вопрос видимо обсуждался сто раз, но толкового ответа не увидел.

Приведите пример флешек, не имеющих DocumentClass. Капитан шепнул, что если есть флешка, то этот класс у нее точно есть.

Можно событийно, через LoaderInfo#sharedEvents.


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

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