Форум 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)
-   -   eval in as 2.0 (http://www.flasher.ru/forum/showthread.php?t=102086)

Mr. Fixit 08.10.2007 20:25

eval in as 2.0
 
чем же заменить eval в этом классе, что бы работал код...
this[""] - не помогает.

Код:

import mx.utils.Delegate;

class SlideShow {
        private var randomNum = 0;
        private var randomNumLast = 0;
        var container_mc;
        var watcher_mc;
        var images_xml:XML;
        var imageArray:Array;
        var timerInterval:Number;
        var thisLoader;
        var numPause:Number;
        var order:String;
        var looping:String;
        var fadetime:Number;
       
        function SlideShow () {
                container_mc = _level0.createEmptyMovieClip ("container", 0);
                container_mc.createEmptyMovieClip ("loader1_mc",2);
                container_mc.createEmptyMovieClip ("loader2_mc",1);
                watcher_mc = _level0.createEmptyMovieClip ("watcher_mc", 100);

                images_xml = new XML ();
                images_xml.ignoreWhite = true;
                images_xml.onLoad = Delegate.create (this, parse);
                images_xml.load ("images.xml");
        }
       

        function parse () {
                imageArray = new Array ();
                var root = getNode (images_xml);

                numPause = Number (getNode (images_xml).attributes.timer * 1000);
                order = getNode (images_xml).attributes.order;
                looping = getNode (images_xml).attributes.looping;
                fadetime = Number (getNode (images_xml).attributes.fadetime);


                var imageNode = root.lastChild;
                while (imageNode.nodeName != null) {
                        var imageData = new Object ();
                        imageData.path = imageNode.attributes.path;
                        imageArray.push (imageData);
                        imageNode = imageNode.previousSibling;

                }
                container_mc._x = 50;
                container_mc._y = 50;
                imageArray.reverse ();
                imageGen (imageArray);
        }

        // depth swapping
        function swapPlace (clip, num) {
                eval (clip).swapDepths (eval ("container_mc.loader" + num + "_mc"));

        }

        function loadImages (data, num) {
                var i;
                if (i == undefined || i == 2) {
                        i = 2;
                        createLoader (i,data,num);
                        i = 1;
                } else if (i == 1) {
                        createLoader (i,data,num);
                        i = 2;
                }
        }
       
        function createLoader (i, data, num) {

                thisLoader = eval ("container_mc.loader" + i + "_mc");
                trace (thisLoader); // UNDEFINED
               
               
                thisLoader._alpha = 0;
                thisLoader.loadMovie (data[num].path);
                watcher_mc.onEnterFrame = function () {
                        var picLoaded = thisLoader.getBytesLoaded ();
                        var picBytes = thisLoader.getBytesTotal ();
                        if (isNaN (picBytes) || picBytes < 4) {
                                return;
                        }
                        if (picLoaded / picBytes >= 1) {
                                swapPlace ("container_mc.loader2_mc",1);
                                var alphaTween:Object = new mx.transitions.Tween (thisLoader, "_alpha", mx.transitions.easing.Regular.easeOut, 0, 100, fadetime, true);
                                timerInterval = setInterval (imageGen, numPause, data);
                                delete this.onEnterFrame;
                        }
                };
        }
        function imageGen (data) {
                var p:Number;
                if (p == undefined || p == data.length && looping == "yes") {
                        p = 0;
                } else {
                        break;
                }
                loadImages (data,p);

                p++;
                clearInterval (timerInterval);
        }


        function getNode (xml:XML):XMLNode {
                var node:XMLNode = xml.firstChild;
                for (var i:Number = 1; i < arguments.length; i++) {
                        node = node.childNodes[arguments[i]];
                }
                return node;
        }

}


iNils 08.10.2007 20:56

А зачем тут eval?
Код:

function swapPlace (clip, num) {
        eval (clip).swapDepths (eval ("container_mc.loader" + num + "_mc"));
}
...
swapPlace ("container_mc.loader2_mc",1);

Почему не передавать ссылку на клип, вместо строки?

Kikasso 08.10.2007 20:56

Код:

container_mc["loader" + num + "_mc"];
а вообще конечно, ссылку передавай

Mr. Fixit 09.10.2007 11:49

вообще убрал передачу параметров, зачем они нужны?
Код:

function swapPlace () {
        container_mc["loader2_mc"].swapDepths (container_mc["loader1_mc"]);
}
...
swapPlace ();


etc 09.10.2007 12:57

А с чего ты взял, что именно container_mc нужен? И что будет именно loader2_mc? Функция должна выполнять свою задачу для любых двух клипов, а не для определенных.

Mr. Fixit 09.10.2007 13:29

в даном случае мне только container_mc и нужен, И будет именно loader2_mc ;)

etc 09.10.2007 13:32

А почему бы не написать универсальную функцию?
Впрочем, она уже есть, swapDepths называется.


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

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