Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Flash MX: myMovieClip.onData (http://www.flasher.ru/forum/showthread.php?t=29333)

Entropy 28.03.2002 20:46

Flash MX: myMovieClip.onData
 
В первом кадре главной timeline лежит мувик myMovieClip, в этом же кадре следующий код:
Код:

myMovieClip.onData = function() {
  trace("onData");
};
myMovieClip.loadMovie("Foo.swf");

Так вот я не понял юмор: события onData не происходит, да и как оно вообще может происходить, если старый мувик заменяется на новый и, сооответствственно, удаляются все обработчики событий, связанные с ним? Например, если в предыдущем примере написать
Код:

myMovieClip.onRelease = function() {
  trace("onRelease");
};

то этот обработчик благополучно работает до тех пор, пока не загрузится новый мув, потом - фиг.

Может, кто-нибудь мне объяснит, как правильно использовать событие onData?

Спасибо.

УильямБрэдберри 28.03.2002 21:00

onData - вешается на событие загрузки переменных
loadVariables

и на
XML

но не на loadMovie

УильямБрэдберри 28.03.2002 21:02

http://www.flasher.ru/src/stats_1146/

загрузка movie - отлавливается др. условием [функция getBytesLoaded();]

Entropy 28.03.2002 21:12

Хм-м, а это тогда что? Смотрим справку, раздел MovieClip.onData:

Цитата:

Description

Event handler; invoked when a movie clip receives data from a loadVariables or loadMovie call.

You must define a function that executes when the event is invoked.

Nox Noctis 28.03.2002 21:24

2УильямБрэдберри
дооообрый веееечер.....

Цитата:

упс... ну вот, товарисч Энтропий меня опередил пока я в хэлп за цитатой лез :D

Nox Noctis 28.03.2002 21:52

2Entropy
все проще :)
если сделать клип в сцене, и на него повесить
онКлипЕвент (дата)
то все работает :D

а если присваивать хэндлер как функцию, то (ты сам же сказал !) - хэндлер убъется, когда ты на место клипа новый подгрузишь...


зы: а по сути - УильямБрэдберри прав... это в хэлпе глюк

Entropy 28.03.2002 22:22

М-дя, уши им надо поотворачивать за такие глюки :mad:.

Насчет onClipEvent: я так и знал, что кто-нибудь предложит этот способ, да не то все это. :( Я привык к классическому объекно-ориентированному программированию и строю задачу так чтобы можно было создать все с чистого листа (ну почти), т.е. через createEmptyMovieClip. Это не всегда надо, но если Вы заниметесь чем-либо более сложным, чем изготовление часиков, то ООП - единственный способ вытянуть крупный проект. А как интересно я прикручу onClipEvent к динамически созданному мувику? Палёво все это, придется опять все через задний проход делать.

Лвдно, спасибо всем, кто откликнулся.

А может, все-таки не ошибка это?

Aib 29.03.2002 00:06

Слушай, Entropy, Тебе ведь показали, как это работает. Зачем Тебе ещё варианты, сомнительные варианты...
Ты, к примеру, видя автобус на остановке, который куда надо идёт, садишься в него или ждёшь, не поедит ли туда ещё один, а ??? :D :D :D
По поводу onClipEvent - если Ты мувик извне подкачиваешь, то в нём и ставь все эти события, проверку на закаченность - см. getBytesLoaded() и getBytesTotal(). А если Ты пустой мув создаешь, так на кой Тебе вообще проверка на загруженность.
По поводу крупных проектов - Flash MX только что вышел, а до этого народ как-то делал проекты, и дааалееекооо не часики.

Entropy 29.03.2002 00:28

Здесь дело не в автобусах, а в том, что MovieClip.onData это красиво, а getBytesLoaded() это Камасутра. Безусловно можно вытянуть мувик из библиотеки, в него еще вложить инстанс мувика на который повесить онКлипЭвент и т.д., но... ну вы поняли? А вопрос о том как сделать так чтобы вот это работало
Код:

this.createEmptyMovieClip(myMovieClip, 0);
myMovieClip.onData = function() {
  trace("onData");
};
myMovieClip.loadMovie("Foo.swf");

так и остался открытым. Но ведь именно так это и должно работать в теории.

Aib 29.03.2002 00:52

Тебе нужно, чтоб рога работала, или чтоб Твой код заработал. Если код - то добро пожаловать к крупнозвонким.
А если прога, то
Код:

this.createEmptyMovieClip(myMovieClip, 0);
myMovieClip.loadMovie("Foo.swf");
while (myMovieClip.getBytesTotal() > myMovieClip.getBytesTotal()){
// ждём
}
if (myMovieClip.getBytesTotal() <= myMovieClip.getBytesTotal()){
  trace("Loaded");
}

Или что-то в этом роде. Короче, обычный внутренний прелоадер.

john 29.03.2002 01:11

Проблема в том что мувик с подгруженым содержанием уже "другой swf" и тут не registerClass не onData не onLoad не помогают,

единственный выход это вызвать действие из подгружаемого SWF.

либо делать устаревшими методами....

john 29.03.2002 01:23

Смешное решение, но что то в этом есть :)


Код:



a = new Sound();
a.onLoad = function()
{
        trace(this.getBytesLoaded());
        myMovie_mc.loadMovie("load.jpg");
        delete this;
};
a.loadSound("load.jpg");

сейчас смувиками попробую

john 29.03.2002 02:35

немного оформилась идея, вот что могу предложить,

создаем некий объект который загружает данные (SWF, JPG или MP3), кеширует данные, которы после загрузки можно уже использовать.

работа основывется на использовании объекта Sound.
ему как показала практика что загрузать, стрим он и есть стрим.

название Image взял из JS как бы понятно. Удобнее чем пользовать Preloader например

Код:

//-------------------------------------------------------------------------
//        создание класса image
//-------------------------------------------------------------------------
_global.Image = function(src)
{
        this.data = new Sound();
        this.data.root = this;
        if (src != undefined) {
                this.tmp_interval = setInterval(this,"load",20,src)// это чтобы успеть создать эвент onLoad
        }
};
Image.prototype.load = function(src)
{
        clearInterval(this.tmp_interval);
       
        this.data.onLoad = function()
        {
                this.root.onLoad();
        };
        this.data.loadSound(src);
};
Image.prototype.getBytesLoaded = function()
{
        return this.data.getBytesLoaded();
};
Image.prototype.getBytesTotal = function()
{
        return this.data.getBytesTotal();
};
ASSetPropFlags(_global, "Image", 7);
//-------------------------------------------------------------------------
//        использование 1
//-------------------------------------------------------------------------
img = new Image("load.jpg");
img.onLoad = function()
{
        myMovie_mc.loadMovie("load.jpg");
};
//-------------------------------------------------------------------------
//        использование 2
//-------------------------------------------------------------------------
img = new Image();
img.onLoad = function()
{
        myMovie_mc.loadMovie("load.jpg");
};
img.load("load.jpg")

вот такие дела :)

john 29.03.2002 04:29

Вот это я думаю это уже окончательный релиз :D


Код:


//*************************************************************************
//-------------------------------------------------------------------------
//        class image
//-------------------------------------------------------------------------
_global.Image = function(src,mc)
{
        this._targetMovie = mc;
        this.data = new Sound();
        this.data.root = this;
        if (src != undefined)
        {
                this.tmp_interval = setInterval(this,"load",20,src)// for onLoad creat
        }
}
Image.prototype.load = function(src,mc)
{
        clearInterval(this.tmp_interval);
       
        this._targetMovie = mc||this._targetMovie;
        this._src = src;
       
        this.data.onLoad = function()
        {
                this.root.onLoad();
        }
        this.data.loadSound(src);
}
Image.prototype.getBytesLoaded = function()
{
        return this.data.getBytesLoaded();
}
Image.prototype.getBytesTotal = function()
{
        return this.data.getBytesTotal();
}
Image.prototype.onLoad = function()
{
        if(this._targetMovie != undefined )this._targetMovie.loadMovie(this._src);
}

Image.prototype.addProperty("src",function()
{
        return this._src;
},Image.prototype.load)

ASSetPropFlags(_global, "Image", 7);

//*************************************************************************
//-------------------------------------------------------------------------
//        usage 1
//-------------------------------------------------------------------------
img = new Image("load.jpg");
img.onLoad = function()
{
        myMovie_mc.loadMovie("load.jpg");
}
//-------------------------------------------------------------------------
//        usage 2
//-------------------------------------------------------------------------
img = new Image();
img.onLoad = function()
{
        myMovie_mc.loadMovie("load.jpg");
}
img.load("load.jpg")
//-------------------------------------------------------------------------
//        usage 3
//-------------------------------------------------------------------------
img = new Image();
img.onLoad = function()
{
        myMovie_mc.loadMovie("load.jpg");
}
img.src = "load.jpg";
//-------------------------------------------------------------------------
//        usage 4
//-------------------------------------------------------------------------
img = new Image();
img.load("load.jpg",myMovie_mc);
//-------------------------------------------------------------------------
//        usage 5
//-------------------------------------------------------------------------
img = new Image("load.jpg",myMovie_mc);


john 29.03.2002 05:52

вот пример загрузки картинки (JPG),

http://www.3wgraphics.net/tmp/load/test_load.html

SWF то же самое, лень выкладывать пример.

john 29.03.2002 16:06

ну как?

Baltika 29.03.2002 19:06

мудрено
%)


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

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