Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   onEnterFrame.... теряется переменная (http://www.flasher.ru/forum/showthread.php?t=122271)

micoloss 06.03.2009 10:50

onEnterFrame.... теряется переменная
 
Доброго времени суток!

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

Код AS1/AS2:

 
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 - т.е. всё нормально, так как надо. Если здесь же добавляю
Код AS1/AS2:

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

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

iNils 06.03.2009 11:35

1. Если используете строгую типизацию, то используйте ее везде.
2. Забудь при eval и километры путей. Используйте ссылки.
3. Если вы аттачите клип, то зачем внутри его манипуляции с созданием img и imgg? Сделайти сразу готовую структуру.
4. Ваша переменная temp существовала на время жизни исполнения функции addPart, потом он попадала в рай переменных. Ее надо было создавать внутри мувиклипа.
Код AS1/AS2:

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

самое смешное что я даже сделал вот так - а в условие всё равно не попадает

Код AS1/AS2:

 
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

Код AS1/AS2:

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);
                }
        };
}



Часовой пояс GMT +4, время: 10:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.