PDA

Просмотр полной версии : [As2] Потеря видимости функции в классе


Psycho Tiger
10.09.2007, 15:11
Проблема такая:
Я загружаю класс, после вызываю его с параметрами.
Код класса:

class classes.dot extends MovieClip{
private var timeOut:Number;

function dot(obj:MovieClip,delay:Number){
timeOut=setInterval(this,"init",delay,obj);
}


function init(obj:MovieClip){
trace("Interval inited");
clearInterval(timeOut);
}
}


После, если я назначаю мс через linkage, все работает на ура.
Но если же я назначаю через new dot, то setInterval просто не видит функцию init. Дело не в имени функции - меня её пробовал.
Поиском пользовался, но все что нашел - отсуствие слова this в setInterval. Заранее благодарен.


Такс... вылез и 2 баг, похоже тоже из за области видимости...


class classes.dot extends MovieClip{
private var objxTween,objyTween,objwTween,objhTween;
private var timeOut:Number;

function dot(obj:MovieClip,delay:Number,nextObj:MovieClip){
//Initing dot
//timeOut=setInterval(this,"init",delay,obj);
obj._visible=false;
init(obj,nextObj);
}


public function init(obj:MovieClip,nextObj:MovieClip){
//clearInterval(timeOut);
obj._visible=true;
objwTween=new mx.transitions.Tween(obj, "_width", mx.transitions.easing.Elastic.easeOut, obj._width*5, obj._width, 1.7, true);
objhTween=new mx.transitions.Tween(obj, "_height", mx.transitions.easing.Elastic.easeOut, obj._height*5, obj._height, 1.7, true);

objhTween.onMotionFinished=function(){
//Creating lines
obj.lineStyle(2,0x000000,100);
obj.moveTo(obj.getBounds(_root).xMin,obj.getBounds(_root).xMax);
obj.lineTo(nextObj._x,nextObj._y);
}
}



}


В флэшке самой делаем код такой:


import classes.dot;

for (var i=1; i<=10; i++){
m=attachMovie("dot","dot"+i,i,{_x: random(200)+100, _y:random(200)+100});
if (i>1) new dot(m,10,z);
z=m;
}


Запускаем... все точки приземлятся, после этого они должны нарисовать между собой линии... самое интересное, что линии рисуются правильно, но не там где надо... С чем это может быть связано?

udaaff
10.09.2007, 16:06
По поводу первого бага: если создаешь через new, extends MovieClip убери, ты же не создаешь экземпляр мувиклипа.
У меня заработало без extends MovieClip. Чем это объясняется, я хз.

Tardos Mors
10.09.2007, 16:51
Мувики создаются через attachMovie, а не через new.
Если класс является подклассом мувиклипа, то его это тоже касается.

Psycho Tiger
10.09.2007, 16:55
Хм... и вправду работает, спасибо. У меня есть подозрение, что флэш смещает координаты сначала от _root к точкам, а после когда я прошу построить линии снова прибавляет их.

Тардос, ты не понял: мувики я создаю через attachMovie, а после даю классу dot их обработать.

Романтика! Если делать через setInterval 1 часть создания линии он видит... и все линии тянутся в непонятном направлении...