Просмотр полной версии : 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();]
Хм-м, а это тогда что? Смотрим справку, раздел 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
а если присваивать хэндлер как функцию, то (ты сам же сказал !) - хэндлер убъется, когда ты на место клипа новый подгрузишь...
зы: а по сути - УильямБрэдберри прав... это в хэлпе глюк
М-дя, уши им надо поотворачивать за такие глюки :mad:.
Насчет onClipEvent: я так и знал, что кто-нибудь предложит этот способ, да не то все это. :( Я привык к классическому объекно-ориентированному программированию и строю задачу так чтобы можно было создать все с чистого листа (ну почти), т.е. через createEmptyMovieClip. Это не всегда надо, но если Вы заниметесь чем-либо более сложным, чем изготовление часиков, то ООП - единственный способ вытянуть крупный проект. А как интересно я прикручу onClipEvent к динамически созданному мувику? Палёво все это, придется опять все через задний проход делать.
Лвдно, спасибо всем, кто откликнулся.
А может, все-таки не ошибка это?
Слушай, Entropy, Тебе ведь показали, как это работает. Зачем Тебе ещё варианты, сомнительные варианты...
Ты, к примеру, видя автобус на остановке, который куда надо идёт, садишься в него или ждёшь, не поедит ли туда ещё один, а ??? :D :D :D
По поводу onClipEvent - если Ты мувик извне подкачиваешь, то в нём и ставь все эти события, проверку на закаченность - см. getBytesLoaded() и getBytesTotal(). А если Ты пустой мув создаешь, так на кой Тебе вообще проверка на загруженность.
По поводу крупных проектов - Flash MX только что вышел, а до этого народ как-то делал проекты, и дааалееекооо не часики.
Здесь дело не в автобусах, а в том, что MovieClip.onData это красиво, а getBytesLoaded() это Камасутра. Безусловно можно вытянуть мувик из библиотеки, в него еще вложить инстанс мувика на который повесить онКлипЭвент и т.д., но... ну вы поняли? А вопрос о том как сделать так чтобы вот это работало
this.createEmptyMovieClip(myMovieClip, 0);
myMovieClip.onData = function() {
trace("onData");
};
myMovieClip.loadMovie("Foo.swf");
так и остался открытым. Но ведь именно так это и должно работать в теории.
Тебе нужно, чтоб рога работала, или чтоб Твой код заработал. Если код - то добро пожаловать к крупнозвонким.
А если прога, то
this.createEmptyMovieClip(myMovieClip, 0);
myMovieClip.loadMovie("Foo.swf");
while (myMovieClip.getBytesTotal() > myMovieClip.getBytesTotal()){
// ждём
}
if (myMovieClip.getBytesTotal() <= myMovieClip.getBytesTotal()){
trace("Loaded");
}
Или что-то в этом роде. Короче, обычный внутренний прелоадер.
Проблема в том что мувик с подгруженым содержанием уже "другой swf" и тут не registerClass не onData не onLoad не помогают,
единственный выход это вызвать действие из подгружаемого SWF.
либо делать устаревшими методами....
Смешное решение, но что то в этом есть :)
a = new Sound();
a.onLoad = function()
{
trace(this.getBytesLoaded());
myMovie_mc.loadMovie("load.jpg");
delete this;
};
a.loadSound("load.jpg");
сейчас смувиками попробую
немного оформилась идея, вот что могу предложить,
создаем некий объект который загружает данные (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")
вот такие дела :)
Вот это я думаю это уже окончательный релиз :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);
вот пример загрузки картинки (JPG),
http://www.3wgraphics.net/tmp/load/test_load.html
SWF то же самое, лень выкладывать пример.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.