Форум 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)
-   -   Вызов setInterval () в классе. (http://www.flasher.ru/forum/showthread.php?t=109585)

Волгоградец 17.03.2008 13:55

Вызов setInterval () в классе.
 
Привет! Друзья, помогите разобраться с такой вот ситуёвиной: в классе не работает setInterval (), а точнее не создается экземпляр другого класса.
Код:

import mx.utils.Delegate;
class LevelOne {
        private var mc:MovieClip;
        private var n:Number;
        private var interval:Number;
        private var rapid:Number = 100;

        public function LevelOne (_mc:MovieClip){
                mc = _mc;
                mc.onMouseDown = Delegate.create(this, shoot);
                mc.onMouseUp = Delegate.create(this, finish);
        }
       
        private function shoot ():Void{
                n = setInterval (create, rapid);
        }
       
        private function finish ():Void{
                clearInterval (n);
        }

        private function create ():Void{
                trace ("kkk"); //этот трэйс срабатывает
                var bul:Shot = new Shot (mc); //экземпляр на сцене не появляется
        }
}

Вот на всякий случай код класса, экземпляр которого нужно создать:
Код:

class Shot {
       
        private var missile:MovieClip;
        private var _mc:MovieClip;
        private static var a:Number = 0;

        public function Shot (mc:MovieClip){
                _mc = mc;
                a ++;
                missile = _mc.attachMovie("inst", "inst" + a, _mc.getNextHighestDepth ());
        }
}

Я думаю что это проблемы с "малопонятной" областью видимости этого самого setInterval ()...

WindWalker 17.03.2008 14:15

Ты не передаёшь ссылку на объект.
Сделай так:
Код:

n = setInterval (this, "create", rapid);

etc 17.03.2008 14:21

Код:

setInterval(this, 'create', rapid);

Волгоградец 17.03.2008 15:08

Спасибо!
А на что указывает слово this?

etc 17.03.2008 15:40

На экземпляр класса, то бишь на экземпляр LevelOne.

WindWalker 17.03.2008 15:44

На текущий объект. В данном случае - на объект класса LevelOne.

Функция-то у тебя вызывалась, и конструктор вызывался, то вот поле mc не находилось.

Попробуй в своём первоначальном варианте написать:
Код:

private function create ():Void{
          trace ("this: "+this);
          trace ("this.mc: "+this.mc);
          trace ("mc: "+mc);
        var bul:Shot = new Shot (mc);
}

И увидишь сплошные undefined.
Затем поменяй setInterval так, как было сказано выше, и обнаружишь, что this теперь показывается как [Object], а this.mc и mc - это синонимы.

Волгоградец 17.03.2008 16:03

Теперь все ясно. WindWalker, __etc, большое спасибо!


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

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