Форум 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)
-   -   Проблема с while (http://www.flasher.ru/forum/showthread.php?t=96002)

Makak 21.05.2007 16:29

Проблема с while
 
Хочу сделать зацыкленно плывущий объект на AS3

есть рабочий код на AS2:
Код:

var n:Number = 4;
var i = 0;
while (i < n)
{
    this.attachMovie("cloud", "c" + i, i, {_x: 800 * i, onEnterFrame: function ()
    {
        if (++this._x > 1600)
        {
            this._x = this._x - 800 * n;
        }
    }});
    ++i;
}

пытаюсь переписать его на AS3:
Код:

package
{
        import flash.display.*;
        import flash.events.*;
        import flash.display.Sprite;
       
        public class main extends Sprite
        {
                public function main()
                {
                        var n:Number = 4;
                        var i:Number = 0;
                       
                        while (i < n)
                        {
                                var clouds:cloud = new cloud()
                                this.addChild(clouds);
                                clouds.addEventListener(Event.ENTER_FRAME,enterFrame_handler);
                               
                        }
                        ++i;                       
                }
               
                private function enterFrame_handler(e:Event):void
                {
                        x++;
                        if (x > 1600)
                          {
                                x = x - 800 * 4;
                            }
                }
        }
}

две проблемы:
1. ругается на то что цикл (while) выполняется слишком долго...
2. как сделать динамическое название переменной в AS3 (как в примере на AS2 "c" + i )...

p.s. может есть проще способ решить эту задачу?

etc 21.05.2007 16:51

1. Потому что ++i вне цикла, а не внутри.
2. Задать name у cloud.

з.Ы. Имена классов должны начинаться с прописной буквы, обязательно.

Makak 21.05.2007 16:58

1-е спасибо!
2-е не понял :( ...

etc 21.05.2007 17:10

Код:

clouds.name = 'cloud'+i;
Потом обращаться через getChildByName.

Makak 24.05.2007 15:19

__etc спасибо :)

решил по моему способом проще... не знаю правильно или нет но работает :)


Код:

package
{
        import flash.events.*;
        import flash.display.Sprite;
       
        public class main extends Sprite
        {
                public function main()
                {
                        var clouds1:cloud = new cloud()
                        var clouds2:cloud = new cloud()
                        clouds1.x = 0;
                        clouds2.x = -800;
                        this.addChild(clouds1);
                        this.addChild(clouds2);
                        clouds1.addEventListener(Event.ENTER_FRAME,enterFrame_handler);
                        clouds2.addEventListener(Event.ENTER_FRAME,enterFrame_handler);
                       
                }
                private function enterFrame_handler(e:Event):void
                {
                        x++;
                        if (x == 800) x = 0;
                       
                }
        }
}



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

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