Форум 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");
}

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


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

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