Форум 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=145409)

artur1995g 07.10.2010 01:06

Удаление экземпляра класса.
 
Здравствуйте)

У меня такая проблема: у меня есть класс Main

Main :
Код AS3:

package {
        import flash.display.*;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
        import flash.text.*;
        import flash.events.MouseEvent;
        public class Main extends Sprite {
                public var shar:Bubble;
                public var i:int;
                public var t:TextField = new TextField();
 
                public function Main() {
                        var timer:Timer = new Timer(1000, 0);
                        timer.addEventListener(TimerEvent.TIMER, newbubble);
                        timer.start();
 
                }
                function newbubble(e:TimerEvent):void {
                        shar=new Bubble();
                        shar.x=0;
                        shar.y=Math.random()*440;
                        addChild(shar);
                        this.addEventListener (MouseEvent.CLICK, remove);
                        this.addChild(t);
                        }
 
 
 
 
 
 
 
                function remove(e:MouseEvent):void {
                this.removeChild(shar);
                i+=1;
                trace(i);
                if (i<10) {
                t.text=String(i);
                }
                else {
                        t.text="УРАААА!!!!11";
                }
                }
 
 
 
 
 
        }
}

и класс Bubble:
Код AS3:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.text.*;
        public class Bubble extends MovieClip {
                var speed=Math.random()*20;
                public function Bubble() {
                        this.addEventListener(Event.ENTER_FRAME, handler_enterFrame);
                }
                function handler_enterFrame(e:Event):void {
                        this.x+=speed;
                }
 
        }
}

.

Вообщем. У меня каждую секунду генерируются шары и летят с разной скоростью. При клике на них они должны удаляться. Но есть глюк. При нажатии на некоторые шары, удаляются совсем другие шары, но не тот, на который я жму. В чем дело?!

TanaTiX 07.10.2010 01:16

Наверное так
Код AS3:

removeChild(e.currentTarget);


dimarik 07.10.2010 01:37

Угу. По правилам хорошего тона

Код AS3:

function remove(event:MouseEvent):void {
    if (
        event.target is Bubble
        && event.target.parent === this
    ) {
        super.removeChild(event.target);
    }
}

А то при клике можно попасть на дитя, которое совсем не шарик. Или шарик, но не наш. )


А в классе Bubble нужно предусмотреть отписку от Event.ENTER_FRAME при удалении bubble со Stage. И я вообще вижу сомнительным перенос родительской бизнес-логики в детей. Лучше укажите явно, что дите работает под руководством родителя. Поставьте ему какую-нибудь GoF-Strategy, можно даже с обратной связью. А сейчас получается, что дите бегает само по себе. Но, если так и задумано, то нет вопросов.

Hidest 07.10.2010 18:33

Вам уже все объяснили, добавлю лишь то, что вы создаете каждый раз шар, переписывая поле класса (то, которое public var shar:Bubble; ). А потом его и удаляете, но там находится ссылка уже совсем на другой шар.

artur1995g 08.10.2010 00:28

Я вас не совсем понял.

Что значит event.target и почему у меня вылезает ошибка, когда я так пишу?

1120: Access of undefined property event.

andrew911 08.10.2010 00:53

artur1995g
Потому, что надо немного думать при копипасте

event.target это если function remove(event:MouseEvent)
у вас же function remove(e:MouseEvent)

значит для вашего случая не event.target, а e.target

artur1995g 09.10.2010 09:42

Он не работает, я проверял)

Не буду же я вслепую копировать)


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

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