Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как "достучатся" из внешнего swf до Объекта в главном таймлайне? (http://www.flasher.ru/forum/showthread.php?t=127635)

polol 19.07.2009 13:27

Как "достучатся" из внешнего swf до Объекта в главном таймлайне?
 
Если у меня в главном таймлайне лежит AsBroadcaster
Код AS1/AS2:

var my_obj=new Object();
AsBroadcaster.initialize(my_obj);

, в мувик-контейнер там же (названный, к примеру, swf) грузится снаружи external.swf, содержащий broadcastMessage для объекта my_obj.
На swf в главном таймлайне поставлен
Код AS1/AS2:

my_obj.addListener(swf)

.

Как "достучатся" с посланием из swf до my_obj? с
Код AS1/AS2:

_level0.my_obj

не получается...

спасибо...

полный код главного файла:
Код AS1/AS2:

var startX:Number=mc._x;
var startY:Number=mc._y;
var counter:Number=0;
var my_obj=new Object();
AsBroadcaster.initialize(my_obj);
 
mc.onMove=function(){
        status_tf.text="Двигается";
        counter+=1;
        counter_tf.text=counter;
}
mc.onStop=function(){
        status_tf.text="Стоит";
}
 
mc.onPress=function(){
        this.startDrag();
}
mc.onRelease=function(){
        this.stopDrag();
}
 
start_mc03 = new MovieClipLoader();
startpreload03 = new Object();
start_mc03.addListener(startpreload03);
startpreload03.onLoadStart = function(targetmyMC) {
 
};
 
startpreload03.onLoadProgress = function(targetmyMC, lBytes, tBytes) {
 
};
startpreload03.onLoadInit = function (targetmyMC)
{
 
}
 
startpreload03.onLoadComplete = function(targetmyMC) {
 
my_obj.addListener(swf);
};
start_mc03.loadClip("external.swf", swf);

и внешнего:
Код AS1/AS2:

onEnterFrame=function(){
        if(_level0.mc._x-startX!=0 || _level0.mc._y-startY!=0){
                startX=_level0.mc._x;
                startY=_level0.mc._y;
 
                _level0.app.broadcastMessage("onMove");
        }else{
                _level0.app.broadcastMessage("onStop");
        }
}


silin 19.07.2009 15:35

Код AS1/AS2:

obj.broadcastMessage("onMove");

это вызов метода onMove у всех объектов, зарегистрированных в obj как листенеры,
сам obj -это объект с методами AsBroadcaster

а теперь просто прикинь кому и что ты пытаешься "послать"..

в твоем случае бродкастером должен быть swf (AsBroadcaster.initialize(this);),
после того как он загрузится нужно подписать этот mc на его прослушку (swf.addListener(mc)) и тогда broadcastMessage("onMove"); в swf будет поймано в мувике mc основного клипа- будет вызван его метод onMove

ps
в этом частном случае просто _root.mc.onMove приведет к такому же эффекту и без всяких бродкастеров..

RenoVATio 20.07.2009 01:13

Возможно что здесь нужно еще где-то закрыть главную шкалу. Читайте про _lockroot. Когда загружается swf, если в нем где-то есть _root, то оно будет указывать на _root флешки, в которую он загружается.

polol 20.07.2009 01:30

Что-то не выходит. Вообще у меня из swf и к swf обращение и без lockroot работало пока. Из swf просто через _level0, к элементам swf просто через _root.swf...... Сейчас подставил как Вы посоветовали, но сигналы до главного из swf не доходят.
главный сейчас:
Код AS1/AS2:

var startX:Number=mc._x;
var startY:Number=mc._y;
var counter:Number=0;
var object=new Object();
mc.onMove=function(){
        status_tf.text="Двигается";
        counter+=1;
        counter_tf.text=counter;
 
}
mc.onStop=function(){
        status_tf.text="Стоит";
 
}
mc.onPress=function(){
        this.startDrag();
}
mc.onRelease=function(){
        this.stopDrag();
}
 
start_mc03 = new MovieClipLoader();
startpreload03 = new Object();
start_mc03.addListener(startpreload03);
startpreload03.onLoadStart = function(targetmyMC) {
 
};
startpreload03.onLoadProgress = function(targetmyMC, lBytes, tBytes) {
};
startpreload03.onLoadInit = function (targetmyMC)
{
 
}
startpreload03.onLoadComplete = function(targetmyMC) {
        swf._lockroot = true;
        swf.addListener(mc)
};
start_mc03.loadClip("external.swf", swf);

а придаточный:
Код AS1/AS2:

AsBroadcaster.initialize(this)
onEnterFrame=function(){
        if(_level0.mc._x-startX!=0 || _level0.mc._y-startY!=0){
                startX=_level0.mc._x;
                startY=_level0.mc._y;
 
                object.broadcastMessage("onMove");
        }else{
                object.broadcastMessage("onStop");
        }
}


iNils 20.07.2009 13:47

polol, пожалуйста, избавьте нас от множества пустых строк в ваших сообщения.

silin 20.07.2009 17:49

polol, совершенно непонятно, что (зачем) ты пишешь и что ожидаешь получить
Код AS1/AS2:

object.broadcastMessage("onMove");

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


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

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