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

vineda 23.02.2011 20:38

удаление спрайта по клику на нем
 
всем доброго времени суток.
есть такая задача: по клику на стейдже добавляется на стейдж спрайт с кружочком, по клику на спрайте, спрайт должен удалиться(или просто visible=false).
добывляю спрайты я так:
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author me
        */

        public class Main extends Sprite
        {
                public var sprites:Array=new Array();
                public var i:int = 0;
                public var X:Number;
                public var Y:Number;
 
                public function stageClick(e: MouseEvent):void
                {
                        trace(e);
                        X = mouseX;
                        Y = mouseY;
                        sprites[i] = new Sprite();
                        sprites[i].graphics.beginFill(123, 1);
                        sprites[i].graphics.drawCircle(mouseX, mouseY, 10);
                        sprites[i].graphics.endFill();
                        sprites[i].name = "i";
                        stage.addChild(sprites[i]);
                        i++;
                        trace(i);
                        trace(sprites);
                }
 
                public function keyDown(k:KeyboardEvent):void
                {
 
                }
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                        stage.addEventListener(MouseEvent.CLICK, stageClick);
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                }
 
        }
 
}

и вот собственно столкнулся с проблемой - как удалять? пробовал для каждого спрайта addEventListener(MouseEvent.CLICK, spriteClick), но так и не додумался, как его можно удалить, да к тому же появилась еще одна проблема - даже если клик был по спрайту, все равно срабатывает stageClick. Может кто посоветовать, как удалять спрайты по клику?

dimarik 23.02.2011 21:09

addEventListener(MouseEvent.CLICK, spriteClick). В нём проверяете event.target is Sprite и делаете (event.target as Sprite).parent.removeChild(event.target as Sprite). Не нужен массив sprites и итератор i.

vineda 23.02.2011 21:21

спасибо, работает, спрайты теперь удаляются, но осталась вторая проблема - stageClick все равно срабатывает, и рядом с удалившимся спрайтом рисуется новый

colobokXXL 24.02.2011 14:13

то, что быстро в голову приходит, там где делали обработку события "Щелчок на Спрайте", добавьте строчку остановки дальнейшей обработки события:
Код AS3:

event.stopImmediatePropagation();

Протестировал у себя, работает так, как вы поставили в задаче.

vineda 24.02.2011 15:33

спасибо, работает


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

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