Форум 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)
-   -   чем заменить onLoad на мувиклипе? (http://www.flasher.ru/forum/showthread.php?t=108799)

ccwds 29.02.2008 17:58

чем заменить onLoad на мувиклипе?
 
Ну вот у меня куча мувиков на сцене.
В старину просто на каждом мувике писал onLoad, onRelease, onMouseOver и т.д.
Теперь, разумеется, хочется код из мувиков убрать.
С мышиными событиями все понятно,
Код:

my_mc.onRollOver = function() {
.....
}

и т.д.
А как быть с заменой onLoad извне?
Да, я понимаю, что существуют onLoadInit, onLoadComplete и т.д.,
но как я могу их использовать, если я программно не гружу и не создаю эти мувики, они просто уже есть у меня на сцене с соответствующими Instance Name-ами?

iNils 29.02.2008 18:08

onLoad нужен только в классах, если вы пишите код теперь в кадрах, то все содержимое onLoad просто выносится за пределы события.
Вместо
Код:

on (press) {
        trace (1 + this.a);
}
onClipEvent (load) {
        this.a = 1
        trace (this.a);
}
on (release) {
        trace (2 + this.a);
}

внутри клипа надо написать
Код:

this.onPress = function () {
        trace (1 + this.a);
};
this.onRelease = function () {
        trace (2 +  this.a);
};
this.a = 1
trace (this.a);

или, если доступ к клипу mc
Код:

mc.onPress = function () {
        trace (1 + this.a);
};
mc.onRelease = function () {
        trace (2 + this.a);
};
mc.a = 1;
trace (mc.a);


ccwds 29.02.2008 18:35

Спасибо!
Я просто не могу сообразить, как лучше все эти действия присвоить клипам от my_mc1 до my_mc100.
Запихать все в функцию и ее вызвать 100 раз циклом, передавая ей параметром текущее имя клипа? Или здесь изящнее великими и непонятными классами? :)

iNils 29.02.2008 18:43

Если клипы однотипные, то конечно лучше классом.

ccwds 29.02.2008 18:53

Да, на них на всех абсолютно одинаковые действия, они читают корневые переменные и в зависимости от собственного номера в собственном имени распоряжаются ими. :)

Котяра 01.03.2008 20:44

Цитата:

Сообщение от iNils
Если клипы однотипные, то конечно лучше классом.

Почему? чем хуже назначение действий в цикле?
Ничем.

iNils 01.03.2008 21:01

Цитата:

Сообщение от Котяра
Почему? чем хуже назначение действий в цикле?
Ничем.

Тем, что когда пишем класс, существует одна копия метода или события. А когда назначаем в цикле, то у каждого клипа своя копия. В итоге больший расход памяти.

chingachgoog 02.03.2008 01:17

Если экономить память, то вполне можно обойтись без классов:
вместо

Код:

mc.onRelease = function () {
        trace (2 + this.a);
};

написать:
Код:

//блок задания метода в цикле
mc.onRelease = f_1
//внешняя функция вне тела цикла
function f_1 () {
        trace (2 + this.a);
};

Что касается классов, то одна копия существует лишь при занесении метода в прототип класса, а если метод в конструкторе класса, то вовсе нет.

iNils 02.03.2008 01:34

Метод в конструкторе класса?

chingachgoog 02.03.2008 12:04

а вдруг потребуется метод с собственным свойством?

да собственно занесение метода в конструктор класса - это как раз аналог примера 1 поста 8, а занесение метода в прототип класса - аналог примера 2 поста 8.


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

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