Просмотр полной версии : Увеличение до (_xscale=100, _yscale=100). Уменьшение до (_xscale=75, _yscale=75).
Есть массив, состоящий из конечного числа элементов (все с разными именами). Нужно чтобы при наведении на любой элемент массива этот элемент увеличивался (от первоначального состояния - функция Begin();) до (_xscale=100, _yscale=100). При отведении указателя мыши с данного элемента, он должен возвращаться в положение, описанное функцией Begin();
Листинг: var aLogo4:Array = [mcQw, mcEr, mcTy, mcU, mcOp, mcGg, mcFg, mcFk, mcPy];
//
Begin();
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].onRollOver = function() {
if (_root.activ_Logo4 != this) {
bigest();
} else {
break;
}
};
}
//
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].onRollOut = function() {
if (_root.activ_Logo4 != this) {
smallest();
} else {
break;
}
};
}
// Исходжное положение: все 50% масштаба и 50% альфы:
function Begin():Void {
var i:Number = 0;
while (i<10) {
aLogo4[i]._xscale = aLogo4[i]._yscale=aLogo4[i]._alpha=75;
i++;
}
}
//
function big():Void {
aLogo4[i]._xscale++;
aLogo4[i]._yscale++;
updateAfterEvent();
}
//
function small():Void {
aLogo4[i]._xscale--;
aLogo4[i]._yscale--;
updateAfterEvent();
}
//
function bigest():Void {
var Int1:Number;
if (aLogo4[i]._xscale != 100) {
Int1 = setInterval(this, "big", 100);
trace("Навел мышь!");
} else {
clearInterval(Int1);
}
}
//
function smallest():Void {
var Int2:Number;
if (aLogo4[i]._xscale != 75) {
Int2 = setInterval(this, "small", 100);
trace("Отвел мышь!");
} else {
clearInterval(Int2);
}
}
В дальнейшем надо будет отслеживать нажатый элемент массива...
Подскажите - где косяк, почему не увеличивается и не уменьшается?..
На счет разных имен - имел ввиду, что нельзя имена циклом задать! Они все уникальные!
RandomUser
29.04.2006, 18:40
Разберись с областями видимости переменных.
У тебя в функциях big, small и др. используется переменная i, а откуда она по твоему мнению береться???
НИЧЕГО не могу понять: в старом добром Паскале - делаешь переменную глобально-доступной и никаких проблем! А тут черт ногу сломит...
ну подскажи, что надо сделать?..
Очень важный момент - уже не в первый раз на этом зарубаюсь...
ПОЖАЛУЙСТА...
Ну изменил я в функции Begin(); переменную с i на j.
Эффекта никакого.
перенес тему в раздел для новичков
RandomUser
29.04.2006, 19:01
Переменная i у тебя задается циклом for (i=0; i<aLogo4.length; i++).
После окончания цикла i=aLogo4.length. Именно эту i ты и подсовываешь в свои функции. Т.е. у тебя обрабатывается элемент aLogo4[aLogo4.length]. Который по определению не существует...
Вывод: передавай параметром этот индекс, предварительно сохранив его в каждом мувике.
2 RandomUser:
Как передать индекс параметром - не совсем пойму о чем речь...
Тем более: что такое "сохранить индекс в каждом документе"?
RandomUser объясни плиз, лучше с листингом.
P.S. А то меня Nirth скоро за человека считать не будет! - создаст новый раздел "Для даунов" и мои посты туда перемещать будет! :(
RandomUser
29.04.2006, 19:25
В флеше есть такое понятие как function... И при вызове каждой функции можно ей передавать параметры...
function big(i):Void {
aLogo4[i]._xscale++;
aLogo4[i]._yscale++;
updateAfterEvent();
}
В приведенном выше премере функция, которую нужно вызвать например так:
big(10);
И функция big обработает это как
aLogo4[10]._xscale++;
aLogo4[10]._yscale++;
updateAfterEvent();
Пока все понятно?
p.s.В свой проект этот код вставлять не надо!
Пока все...
У тебя аси нет?..
RandomUser
29.04.2006, 19:34
Теперь про мувики...
У них есть много своих свойств, например _x, _y, _xscale, _yscale, _alpha и много других. Так вот, в любой мувик можно сохранять тобой заданные переменные!
Например:
var aLogo4:Array = [mcQw, mcEr, mcTy, mcU, mcOp, mcGg, mcFg, mcFk, mcPy];
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].index=i;
aLogo4[i].onRollOver = function() {
if (_root.activ_Logo4 != this) {
bigest();
}
};
}
Здесь мы определили у мувиков не только функцию вызываемую при наведении мышкой на них(onRollOver) но и новую переменную index, которая содержит в себе индекс, под которым этот мувик храниться в массиве aLogo4.
p.s.Аську недам, я жадный...
Так что дальше? - черт с ней, с аськой...
RandomUser
29.04.2006, 19:38
Ну, если еще не понял, то...
Именно эту переменную нужно передавать в твои функции...
Чтобы они корректно работали.
RandomUser
29.04.2006, 19:43
Например модифицируем предыдущий код:
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].index=i;
aLogo4[i].onRollOver = function() {
if (_root.activ_Logo4 != this) {
bigest(this.index);
}
};
}
Здесь происходит вызов функции bigest с параметром указывающим индекс этого мувика в выше приведенном массиве.
var aLogo4:Array = [mcQw, mcEr, mcTy, mcU, mcOp, mcGg, mcFg, mcFk, mcPy];
//
Begin();
var i:Number;
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].index = i;
aLogo4[i].onRollOver = function() {
if (_root.activ_Logo4 != this) {
bigest();
} else {
break;
}
};
}
// Исходжное положение: все 50% масштаба и 50% альфы:
function Begin():Void {
var i:Number = 0;
while (i<10) {
aLogo4[i]._xscale = aLogo4[j]._yscale=aLogo4[j]._alpha=75;
j++;
}
}
//
function big(i:Number):Void {
aLogo4[i].index._xscale++;
aLogo4[i].index._yscale++;
updateAfterEvent();
}
//
function bigest():Void {
var Int1:Number;
if (aLogo4[i].index._xscale != 100) {
Int1 = setInterval(big(i), 100, aLogo4[i].index);
trace("Навел мышь!");
} else {
clearInterval(Int1);
}
}Все зависло! Что делать?
RandomUser
29.04.2006, 19:48
Теперь функция bigest:
function bigest(i):Void {
var Int1:Number;
if (aLogo4[i]._xscale != 100) {
Int1 = setInterval(this, "big", 100, i);
trace("Навел мышь!");
} else {
clearInterval(Int1);
}
}
RandomUser
29.04.2006, 19:50
И естественное продолжения для функции big:
function big(i):Void {
aLogo4[i]._xscale++;
aLogo4[i]._yscale++;
updateAfterEvent();
}
Вот так вот...
Ну дальше думаю разберешься...
RandomUser
29.04.2006, 19:53
И напоследок совет: Пользуйся трейсом, для определения какие данные в твою функцию приходят.
А еще круче Debuger, который запускается во флеше как Ctrl+Shift+Enter. Там можно спокойно посмотреть какие мувики у тебя в сцене есть, какие у свойства, переменные и т.д. и т.п.
Удачи.
Погоди, погоди...
теперь увеличение есть при наведении мыши, но увеличение на 1 итерацию только. Как сделать, чтобы при увеличении - оно было плавным и до 100%?
RandomUser
29.04.2006, 20:02
Э-э... Ну тут без исходника не разберешся... Я как поглядел твой листинг в 16-м посте так меня чуть кандрашка не хватила:)
Int1 = setInterval(big(i), 100, aLogo4[i].index);
if (aLogo4[i].index._xscale != 100)
Особенно эти две строчки...
RandomUser
29.04.2006, 20:05
Кста, clearInterval и проверку на превышения масштаба нужно делать и в функции big, так как именно она будет каждый раз при увеличении вызываться, а bigest только при наведении мышой.
var aLogo4:Array = [mcQw, mcEr, mcTy, mcU, mcOp, mcGg, mcFg, mcFk, mcPy];
//
Begin();
var i:Number;
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].index = i;
aLogo4[i].onRollOver = function() {
if (_root.activ_Logo4 != this) {
bigest(this.index);
} else {
break;
}
};
}
// Исходжное положение: все 75% масштаба и 75% альфы:
function Begin():Void {
var i:Number = 0;
while (i<10) {
aLogo4[i]._xscale = aLogo4[i]._yscale=aLogo4[i]._alpha=75;
i++;
}
}
//
function big(i):Void {
if (aLogo4[i]._xscale != 100) {
aLogo4[i]._xscale++;
aLogo4[i]._yscale++;
updateAfterEvent();
} else {
clearInterval(Int1);
}
}
//
function bigest(i):Void {
var Int1:Number = setInterval(big(i), 100, i);
trace("Навел мышь!");
}
Вот это на данном этапе - как сделать, чтобы при наведении - получалась анимация?, а не одно действие:
aLogo4[i]._xscale++;
aLogo4[i]._yscale++;
RandomUser
29.04.2006, 20:10
А ты в хелпе внимательно читал про функцию setInterval?
Почитай еще разок про то, как передавать параметры вызываемой функции...
setInterval(big(i), 100, i); //Що це таке?
Да сам прекрасно знаю, что у меня косяк В ТОМ ЧИСЛЕ И с функцией setInterval. Я уже сто раз читал - там то 2 параметра, то 3.
Не совсем ясно, почему это?
P.S. Я книгу читаю...
setInterval(объект, имя_функции, интервал1 [параметр1 ... параметрN]);
Кажется так?
Что тут объект тогда?
И на счет имени функции: что не big(i)?
RandomUser
29.04.2006, 20:16
Самый универсальный вариант:
setInterval(this, "big", 100, i);
Здесь первый параметр указывает объект, а второй - это имя метода этого объекта, потом временной интервал, а дльше уже идут параметры, с которымы будет вызваеться этот метод...
А строчка big(i) вызывает один раз эту функцию и нихрена не возращает, а в setInterval нужно именно указатель на функцию в одном варианте, и в другом ваще строковое представления метода.
Слушай, получилось... :)
Очень рад. Пасиба тебе!
А можно тебе хоть (если асю жмотишь) личные сообщения отправлять?
Отвечать будешь?
RandomUser
29.04.2006, 20:21
Всякое в нашей жизни возможно...
Погоди, если далеко не убежал...
var aLogo4:Array = [mcQw, mcEr, mcTy, mcU, mcOp, mcGg, mcFg, mcFk, mcPy];
//
Begin();
var i,j:Number;
for (i=0; i<aLogo4.length; i++) {
aLogo4[i].index1 = i;
aLogo4[i].onRollOver = function() {
if (_root.activ_Logo4 != this) {
bigest(this.index1);
} else {
break;
}
};
}
//
for (j=0; j<aLogo4.length; j++) {
aLogo4[j].index2 = j;
aLogo4[j].onRollOut = function() {
if (_root.activ_Logo4 != this) {
smallest(this.index2);
} else {
break;
}
};
}
// Исходжное положение: все 75% масштаба и 75% альфы:
function Begin():Void {
var i:Number = 0;
while (i<10) {
aLogo4[i]._xscale = aLogo4[i]._yscale=75;
aLogo4[i]._alpha=50;
i++;
}
}
//
function big(i):Void {
if (aLogo4[i]._xscale != 100) {
aLogo4[i]._xscale++;
aLogo4[i]._yscale++;
aLogo4[i]._alpha++;
updateAfterEvent();
} else {
clearInterval(Int1);
}
}
//
function small(j):Void {
if (aLogo4[j]._xscale > 75) {
aLogo4[j]._xscale--;
aLogo4[j]._yscale--;
aLogo4[j]._alpha--;
updateAfterEvent();
} else {
clearInterval(Int2);
}
}
//
function bigest(i):Void {
var Int1:Number = setInterval(this, "big", 5, i);
}
//
function smallest(j):Void {
var Int2:Number = setInterval(this, "small", 5, j);
}
//При наведении - все отлично! Но при отведении - дергается, что-то, только альфа до нуля уменьшается, и то, не всегда...
RandomUser
29.04.2006, 20:38
http://noregret.org/tutor/scope/
Почитай...
RandomUser
29.04.2006, 20:41
Это я к тому, чтобы ты обратил внимания где ты делаешь setInterval и как ты делаешь clearInterval...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.