Просмотр полной версии : События
Еесть несколько мувиклипов. Каждому из них присвоены 3 события (набор событий одинаков для кадого клипа). Ввиду отсутсвия даже средних знаний по флешу я делаю так: клип.событие = function(){}, отдельно для каждого клипа по три события. Получается громоздко (9 обработчиков). Как это можно сделать более компактно?
releaseHandler = function() {
trace(this);
}
mc1.onRelease = releaseHandler;
mc2.onRelease = releaseHandler;
mc2.onRelease = releaseHandler;
Или в цикле.
Molecula
30.04.2007, 14:51
Я думаю можно и так:
mc1.onRelease = mc2.onRelease = mc2.onRelease = releaseHandler;
Пробую через циклы. К примеру, вот:
for (j=1; j<4; j++) {
eval('mc'+j).onRollOver = function() { //////тратата/////// }
}
Грамотен ли код?
for (var i = 0;i<4;i++) {
var mc = this['mc'+i];
mc.onRelease = function() {
…
}
mc.onRollOver = function() {
…
}
…
}
delete mc;
for (var i = 0;i<4;i++) {
var mc = this['mc'+i];
mc.onRelease = function() {
trace(i) }
mc.onRollOver = function() {
…
}
…
}
delete mc;
Почему-то трассируется '4'. Почему же не трассируется последовательно '0, 1, 2, 3' ?
По-моему логично, разве нет? Цикл закончился, переменная приняла значение 4, его мы и трейсим.
Дак цикл ведь повторяется 3 раза. почему трассируется только один раз? И ведь мы поставили условие i<4. Разве эта переменная может принять значение 4?
Цикл выполняется, пока переменная не примет значение 4. Она его приняла. Если бы не приняла, цикл был бы вечный.
Трейс будет при нажатии на клип мышкой.
Окей. Но у меня в свзяи с этим возникает еще одна проблема:
for (var i = 0;i<4;i++) {
var mc = this['mc'+i];
mc.onRelease = function() {
some_function(i)
}
mc.onRollOver = function() {
…
}
…
}
delete mc;
При нажатии на мувиклип mc вызывается функция с параметром, равным i. Так для mc1 он должен быть 1, mc2 - 2 и т.д. Но выходит так, что параметр принимает сразу конечное значение i=4. А необходимо, чтобы для каждого мувика он был свой.
Нужно сохранить это значение.
for (var i = 0;i<4;i++) {
var mc = this['mc'+i];
mc.i = i;
mc.onRelease = function() {
someFunction(this.i);
}
mc.onRollOver = function() {
…
}
…
}
delete mc;
Прошу прощения, а глушить mc зачем? Она ж и так локальная!!
Если этот код написать в функции, то да, локальная. А так — неизвестно, где код будет написан. Я ещё забыл delete i; дописать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.