PDA

Просмотр полной версии : Не работает setInterval


Волгоградец
29.11.2007, 12:04
Привет. Сравните пожалуйста два кода:

//В linkage имя клипа mc
function povt (){
_root.attachMovie ("mc", "mc", _root.getNextHighestDepth (), {_x:50, _y:200});
mc.onEnterFrame = function () {
this._x += 1;
if (this._x >= 200){
removeMovieClip ("mc");
delete this.onEnterFrame;
}
}
}
a = setInterval (povt, 2000);

и

//В linkage имя клипа mc1
var i:Number = 1;
function povt (){
_root.attachMovie ("mc"+i, "mc"+i, _root.getNextHighestDepth (), {_x:50, _y:200});
this["mc"+i].onEnterFrame = function () {
this._x += 1;
if (this._x >= 200){
removeMovieClip ("mc"+i);
delete this.onEnterFrame;
}
}
}
a = setInterval (povt, 2000);

Первый код работат, второй нет (хотя если просто вызвать функцию povt (), пашет). Почему???????????

chingachgoog
29.11.2007, 12:10
потомучто this во втором случае (где onEnterFrame) это не тот this, что ожидается :)

Molecula
29.11.2007, 12:16
Почему не работает, оба работают?

Почему не работают, всё работает.

Волгоградец
29.11.2007, 12:26
Molecula, как работает???!!! Я скопировал код из флэша сюда. У меня клип появляется и стоит на месте!
chingachgoog, как же быть? Пользоваться eval? Но ведь это вроде устаревший метод? И еще вопрос: а что в данном случае ожидается?

chingachgoog
29.11.2007, 12:36
можно так сделать:

lockThis=this
function povt (){
...
lockThis["mc"+i].onEnterFrame=...

Волгоградец
29.11.2007, 12:43
Спасибо, дружище! Но все таки ответь, что ожидает setInterval во втором случае?

chingachgoog
29.11.2007, 12:53
Ожидает не setInterval (который работает нормально и поэтому название темы неправильное), а Волгоградец :)
this в вызванной функции будет указывать не на временную диаграмму, где написан код функции, а на объект активации - в данном случае setInterval, а какой у setInterval может быть onEnterFrame? :)

Волгоградец
29.11.2007, 13:27
Все ясно. Спасибо. И аватар у тебя прикольный (Mortal рулит).