PDA

Просмотр полной версии : onEnterFrame.... теряется переменная


micoloss
06.03.2009, 10:50
Доброго времени суток!

По ходу выполнения функции внутри которой динамически формируются мувики, при событии onEnterFrame - теряется переменая. Чувствую что подвох вообще копеечный - но разобраться не могу.



var my_array:Array =info.split('^');
for(i=0;i<20;i++)
{

setTimeout(addPart, 300 * i, my_array[i]);

}

function addPart()
{

_root.createEmptyMovieClip("next" + _root.f, _root.f+1);
eval("_root.next" +_root.f)._x=_root.f1, eval("_root.next" +_root.f)._y=_root.f2;
eval("_root.next" +_root.f).attachMovie("buttons", "test1", 9);

eval("_root.next" +_root.f).createEmptyMovieClip("img", 112);
eval("_root.next" +_root.f).img._x=-7, eval("_root.next" +_root.f).img._y=-1;
eval("_root.next" +_root.f).img.createEmptyMovieClip("imgg", 112);
eval("_root.next" +_root.f).img.imgg._x=-87, eval("_root.next" +_root.f).img.imgg._y=-37;
loadMovie("http://localhost/data/img/"+ arguments +".jpg", eval("_root.next" +_root.f).img.imgg);


var temp=arguments;



eval("_root.next" +_root.f).onEnterFrame = function (f)
{

if(this.test1._currentframe==5)
{
this.text_movie._visible=true;

trace(temp); ///здесь

}
else
{
this.text_movie._visible=false;
}
}



}




в месте где стоит trace(temp) выходит или значение из моего массива или undefined - т.е. всё нормально, так как надо. Если здесь же добавляю

if(temp == undefined)
{
trace(111);


}


то в это условие не попадаю значения которые при трасировки определяется как undefined. В чём тут дело?

iNils
06.03.2009, 11:35
1. Если используете строгую типизацию, то используйте ее везде.
2. Забудь при eval и километры путей. Используйте ссылки.
3. Если вы аттачите клип, то зачем внутри его манипуляции с созданием img и imgg? Сделайти сразу готовую структуру.
4. Ваша переменная temp существовала на время жизни исполнения функции addPart, потом он попадала в рай переменных. Ее надо было создавать внутри мувиклипа.
var my_array:Array = info.split ('^');
for (var i:Number = 0; i < 20; i++) {
setTimeout (addPart, 300 * i, my_array[i]);
}
function addPart () {
var mc:MovieClip = _root.createEmptyMovieClip ("next" + _root.f, _root.f + 1);
mc._x = _root.f1
mc._y = _root.f2;
mc.attachMovie ("buttons", "test1", 9);
var mcImg:MovieClip = mc.createEmptyMovieClip ("img", 112);
mcImg._x = -7;
mcImg._y = -1;
var mcImg2:MovieClip = mcImg.createEmptyMovieClip ("imgg", 112);
mcImg2._x = -87
mcImg2._y = -37;
mcImg2.loadMovie ("http://localhost/data/img/" + arguments + ".jpg");
var temp = arguments;
mc.temp = arguments;
mc.onEnterFrame = function (f) {
mc.onEnterFrame = function () {
if (this.test1._currentframe == 5) {
this.text_movie._visible = true;
trace (this.temp);
///здесь
} else {
this.text_movie._visible = false;
}
};
}

micoloss
06.03.2009, 12:48
Спасибо за рекомендации. Но даже в таком виде - проблема осталась таже. В трайсе есть undefined, а в условия они не попадают...

iNils
06.03.2009, 13:14
Проверяйте содержимое массива.

micoloss
06.03.2009, 19:20
самое смешное что я даже сделал вот так - а в условие всё равно не попадает



for (var i:Number = 0; i < 20; i++) {
setTimeout (addPart, 300 * i, i);
}
function addPart () {
var mc:MovieClip = _root.createEmptyMovieClip ("next" + _root.f, _root.f + 1);
mc._x = _root.f1
mc._y = _root.f2;
mc.attachMovie ("buttons", "test1", 9);
var mcImg:MovieClip = mc.createEmptyMovieClip ("img", 112);
mcImg._x = -7;
mcImg._y = -1;
var mcImg2:MovieClip = mcImg.createEmptyMovieClip ("imgg", 112);
mcImg2._x = -87
mcImg2._y = -37;
mcImg2.loadMovie ("http://localhost/data/img/" + arguments + ".jpg");

mc.temp = arguments;

mc.onEnterFrame = function () {

if(this.temp == "1") // не попадает в это условие
{
trace(111);

}
};
}



видимо дело в чём то другом.

iNils
06.03.2009, 19:26
for (var i:Number = 0; i < 20; i++) {
setTimeout (addPart, 300 * i, i);
}
function addPart (name:String) {
var mc:MovieClip = _root.createEmptyMovieClip ("next" + _root.f, _root.f + 1);
mc._x = _root.f1;
mc._y = _root.f2;
mc.attachMovie ("buttons", "test1", 9);
var mcImg:MovieClip = mc.createEmptyMovieClip ("img", 112);
mcImg._x = -7;
mcImg._y = -1;
var mcImg2:MovieClip = mcImg.createEmptyMovieClip ("imgg", 112);
mcImg2._x = -87;
mcImg2._y = -37;
mcImg2.loadMovie ("http://localhost/data/img/" + name + ".jpg");
mc.temp = name;
mc.onEnterFrame = function () {
if (this.temp == "1") {
// не попадает в это условие
trace (111);
}
};
}