Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удалить "себя" через некоторое время. (http://www.flasher.ru/forum/showthread.php?t=157267)

Lyso 02.06.2011 22:18

Код AS3:

package{
        import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class RandCircle extends Sprite{
                private var timer:Timer=new Timer(100);
                private var circle:Circle;
 
                public function RandCircle(){
                        timer.addEventListener(TimerEvent.TIMER,onTimer);
                        circle.addEventListener(circle.REMOVE_ME,onRemoveChild);
                        timer.start();
                }
 
                private function onTimer(e:TimerEvent):void{
                        circle=new Circle;
                        addChild(circle);
                        trace(this.numChildren);
                }
 
                private function onRemoveChild(e:Event):void{
                        removeChild(Circle(e.target));
                }
 
 
        }
 
}


КорДум 02.06.2011 22:19

Код AS3:

package {
        import flash.events.Event;
 
        public class MyEvent extends Event {
 
                public function MyEvent(type:String) {
                        super(type);
                }
 
 
                public override function clone():Event {
                        return new MyEvent(type);
                }
        }
}

Минимальный класс кастомного ивента.

Добавлено через 38 секунд
Зачем вы два раза выложили свой неверный код?

Lyso 02.06.2011 22:21

Я изменил, но там возникла уже другая ошибка. В вашем случае надо создавать новый класс под событие..?

КорДум 02.06.2011 22:22

Я выше дал исправленный класс, плюс ниже этого "выше" я дал кастомное событие, использующееся в том исправленном классе, что я дал выше.

Lyso 02.06.2011 22:23

C:\Users\Slava\Desktop\RandCircle.as, Line 16 1119: Access of possibly undefined property REMOVE_ME through a reference with static type Class.

КорДум 02.06.2011 22:24

В ошибке все сказано. Угу, я не написал константу. Но может, вы напишете ее сами?

Добавлено через 3 минуты
Код AS3:

public static const REMOVE_ME:String = "removeMe";

Если у вас вдруг ничего не получилось.

Lyso 02.06.2011 22:30

Код AS3:

package {
        import flash.events.Event;
 
        public class MyEvent extends Event{
                public const REMOVE_ME="REMOVE_ME";
 
                public function MyEvent(type:String) {
                        super(type);
                }
 
                public override function clone():Event {
                        return new MyEvent(type);
                }
        }
}

Где ее написать? Так не работает...

КорДум 02.06.2011 22:31

static. И где типизация?

Добавлено через 2 минуты
А вообще можно бы было не париться и диспатчить/ловить Event.COMPLETE. Для данного случая не принципиально.

Lyso 02.06.2011 22:35

Вот 3 мои класса.

RandCircle.as
Код AS3:

package{
        import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.display.Sprite;
 
        public class RandCircle extends Sprite{
                private var timer:Timer=new Timer(100);
                const REMOVE_ME="REMOVE_ME";
 
                public function RandCircle(){
                        timer.addEventListener(TimerEvent.TIMER, onTimer);
                        timer.start();
                }
 
                private function onTimer(e:TimerEvent):void{
                        var circle:Circle = new Circle();
                        circle.addEventListener(MyEvent.REMOVE_ME,onRemoveChild);
                        addChild(circle);
                        trace(this.numChildren);
                }
 
                private function onRemoveChild(e:MyEvent):void {
                        removeChild(Circle(e.target));
                }
        }
}

Circle.as
Код AS3:

package{
        import flash.display.Sprite;
        import flash.utils.Timer;
        import flash.events.*;
 
        public class Circle extends Sprite{
                const REMOVE_ME="REMOVE_ME";
                private var timer:Timer=new Timer(150,0);
                private var randX:Number=Math.random()*550;
                private var randY:Number=Math.random()*400;
                private var randR:Number=Math.random()*75+20;
 
                public function Circle(){
                        drawThis();
                        timer.addEventListener(TimerEvent.TIMER,onTimer);
                        timer.start();
                }
 
                private function drawThis():void{
                        graphics.lineStyle(1,0x000000,1);
                        graphics.beginFill(0xFFCC99,1);
                        graphics.drawCircle(randX,randY,randR);
                }
 
                private function onTimer(e:TimerEvent):void{
                        this.alpha -= 0.1;
                        dispatchEvent(REMOVE_ME);
                }
 
 
        }
}

MyEvent.as
Код AS3:

package {
        import flash.events.Event;
 
        public class MyEvent extends Event{
                public static var REMOVE_ME:String="REMOVE_ME";
 
                public function MyEvent(type:String) {
                        super(type);
                }
 
                public override function clone():Event {
                        return new MyEvent(type);
                }
        }
}

Возникает одна лишь ошибка:
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать "REMOVE_ME" в flash.events.Event.

КорДум 02.06.2011 22:37

Вы бы хоть документацию открыли, а не методом тыка все попробовали.
Код AS3:

dispatchEvent(new MyEvent(MyEvent.REMOVE_ME));

Добавлено через 2 минуты
Код AS3:

const REMOVE_ME="REMOVE_ME";

Зачем это везде понапихали? Вам бы Мука почитать, его главу про событийную модель.


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

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