PDA

Просмотр полной версии : удаление спрайта по клику на нем


vineda
23.02.2011, 20:38
всем доброго времени суток.
есть такая задача: по клику на стейдже добавляется на стейдж спрайт с кружочком, по клику на спрайте, спрайт должен удалиться(или просто visible=false).
добывляю спрайты я так:
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
то, что быстро в голову приходит, там где делали обработку события "Щелчок на Спрайте", добавьте строчку остановки дальнейшей обработки события:
event.stopImmediatePropagation();
Протестировал у себя, работает так, как вы поставили в задаче.

vineda
24.02.2011, 15:33
спасибо, работает