PDA

Просмотр полной версии : Ошибка в синтаксисе


Deoni
08.07.2007, 01:20
Не могу понять, почему у меня 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?

etc
08.07.2007, 03:14
Именно в этом и ошибка. Вообще код из себя представляет неимоверное месиво.

Deoni
08.07.2007, 10:41
а как написать без ошибки?

etc
08.07.2007, 10:47
this['mc_'+i]._alpha

Deoni
08.07.2007, 11:53
тот же результат - альфа undefined
Если не сложно, посмотри исходник?
Задача была такая - чтобы прямоугольники проявлялись через определенные промежутки времени.

Не прикрепляется файл....
Выкладываю на фтп
http://www.dbpresent.com/tmp/dissolve.rar

iNils
08.07.2007, 16:32
Как сказал __etc, ваш код сплошное мессиво. К примеру
function func1 () {
trace ("func1 " + this);
}
function func2 () {
trace ("func2 " + this);
}
setInterval(this, "func1", 1000);
setInterval(func2, 1000);
Посмотрите, что есть this в каждом синтаксисе setInterval. По скольку вы используете второй синтаксис, то у вас не та область видимости, что нужна.

Deoni
09.07.2007, 02:52
Ну а что мне с моим-то синтаксисом сделать, чтобы код заработал?
Если вместо [mc]_alpha +=2; указать явно имя клипа, например, mc_3._alpha +=2; - всё работает как надо.
Помогите, пожалуйста.

etc
09.07.2007, 10:41
Использовать мой ответ из четвертого поста и setInterval( this, 'nomer', 3000 ); (между прочим, iNils дал пояснение, почему не работает. Трудно было понять?)

Deoni
09.07.2007, 23:24
Не могу понять.
Предложенный вами вариант тоже не работает.
Почему этот код работает

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)?

etc
10.07.2007, 00:47
Потому что в коде полный бардак. Проще переписать в более трезвом состоянии.

Deoni
10.07.2007, 01:21
Нет там никакого бардака.
Две подобные функции.
Одна функция вложена в другую.
Первая с задержкой в 3 секунды создает переменную 'mc' -имя мувиклипа.
Вторая, вложенная в первую, изменяет прозрачность одного из мувиклипов в сцене с именем, соответствующим значению переменной.
Не понимаю, где здесь бардак?
Если не трудно, предложите свой вариант.

iNils
10.07.2007, 02:39
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);
}

Deoni
10.07.2007, 23:37
Огромное спасибо, iNils! :)

wvxvw
11.07.2007, 10:31
Квадратные скобки - это либо массив, либо обращение к свойставм объекта перед скобками. [mc]_alpha в принципе быть не может.