Просмотр полной версии : Ошибка в синтаксисе
Не могу понять, почему у меня alpha undefined?
var j = 0;
var intervalId1:Number;
function nomer(id1){
j++;
mci = "mc"+j;
trace (mci);
var i = 0;
var intervalId2:Number;
function alfa(id2){
i++;
trace (mc_[i]._alpha);
if( i >= 10) clearInterval( intervalId2 );
}
intervalId2 = setInterval( alfa, 1 );
if( j >= 14) clearInterval( intervalId1 );
}
intervalId1 = setInterval( nomer, 3000 );
Подозреваю, ошибка в синтаксисе - mc_[i]._alpha?
Именно в этом и ошибка. Вообще код из себя представляет неимоверное месиво.
а как написать без ошибки?
тот же результат - альфа undefined
Если не сложно, посмотри исходник?
Задача была такая - чтобы прямоугольники проявлялись через определенные промежутки времени.
Не прикрепляется файл....
Выкладываю на фтп
http://www.dbpresent.com/tmp/dissolve.rar
Как сказал __etc, ваш код сплошное мессиво. К примеру
function func1 () {
trace ("func1 " + this);
}
function func2 () {
trace ("func2 " + this);
}
setInterval(this, "func1", 1000);
setInterval(func2, 1000);
Посмотрите, что есть this в каждом синтаксисе setInterval. По скольку вы используете второй синтаксис, то у вас не та область видимости, что нужна.
Ну а что мне с моим-то синтаксисом сделать, чтобы код заработал?
Если вместо [mc]_alpha +=2; указать явно имя клипа, например, mc_3._alpha +=2; - всё работает как надо.
Помогите, пожалуйста.
Использовать мой ответ из четвертого поста и setInterval( this, 'nomer', 3000 ); (между прочим, iNils дал пояснение, почему не работает. Трудно было понять?)
Не могу понять.
Предложенный вами вариант тоже не работает.
Почему этот код работает
var j = 1;
var intervalId1:Number;
function nomer(id1){
j++;
mc = "mc_"+j;
var i = 2;
var intervalId2:Number;
function alfa(id2){
i++;
if (mc=="mc_1")
mc_1._alpha +=2;
else if (mc=="mc_2")
mc_2._alpha +=2;
else if (mc=="mc_3")
mc_3._alpha +=2;
if( i >= 100) clearInterval( intervalId2 );
}
intervalId2 = setInterval( alfa, 1 );
if( j >= 3) clearInterval( intervalId1 );
}
intervalId1 = setInterval( nomer, 3000 );
а этот нет?
var j = 1;
var intervalId1:Number;
function nomer(id1){
j++;
mc = "mc_"+j;
var i = 2;
var intervalId2:Number;
function alfa(id2){
i++;
[mc]_alpha +=2;
if( i >= 100) clearInterval( intervalId2 );
}
intervalId2 = setInterval( alfa, 1 );
if( j >= 3) clearInterval( intervalId1 );
}
intervalId1 = setInterval( nomer, 3000 );
ведь, переменную mc видно из второй функции (alfa)?
Потому что в коде полный бардак. Проще переписать в более трезвом состоянии.
Нет там никакого бардака.
Две подобные функции.
Одна функция вложена в другую.
Первая с задержкой в 3 секунды создает переменную 'mc' -имя мувиклипа.
Вторая, вложенная в первую, изменяет прозрачность одного из мувиклипов в сцене с именем, соответствующим значению переменной.
Не понимаю, где здесь бардак?
Если не трудно, предложите свой вариант.
import mx.transitions.Tween;
import mx.transitions.ease.None;
function goAlpha (mc:MovieClip):Void {
var tween:Tween = new Tween (mc, "_alpha", None.none, 0, 100, 1, true);
}
for (var i:Number = 1; i < 4; i++) {
var mc:MovieClip = this["mc_" + i];
mc._alpha = 0;
setTimeout (this, "goAlpha", 3000 * i, mc);
}
Огромное спасибо, iNils! :)
Квадратные скобки - это либо массив, либо обращение к свойставм объекта перед скобками. [mc]_alpha в принципе быть не может.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.