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

PinGV 15.12.2012 18:50

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

Код AS3:

var timer:Timer = new Timer(500);
 
timer.addEventListener(TimerEvent.TIMER, on);
timer.start();
function on(e:TimerEvent):void{
 
c.graphics.beginFill(0x000000, 0.8);
c.graphics.drawCircle(500*Math.random(),400*Math.random(), 50);
addChild(c);
}


а вот как они убрались при нажатии я без понятия...

Код AS3:

stage.addEventListener(MouseEvent.CLICK, f);
 
function  f (e:MouseEvent):void{
if (numChildren>0){
removeChildAt(0);}
}

максимум что я сумел, удаляется нижний объект, при нажатии в любое место экрана

mooncar 15.12.2012 18:54

PinGV, код в сообщении нужно выделять соответствующими тегами.

Zebestov 15.12.2012 19:07

Как-то так.
Код AS3:

import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.display.Sprite;
 
var t:Timer = new Timer(500);
t.addEventListener(TimerEvent.TIMER, onTimer);
t.start();
 
super.mouseEnabled = false;
super.mouseChildren = true;
super.addEventListener(MouseEvent.CLICK, onClick);
 
function onTimer(event:TimerEvent):void
{
        var newCircle:Sprite = new Sprite();
        newCircle.graphics.beginFill(int(Math.random() * 0xffff) + 0xff0000);
        newCircle.graphics.drawCircle(Math.random() * 450 + 50, Math.random() * 300 + 50, Math.random() * 30 + 10);
        newCircle.graphics.endFill();
        super.addChild(newCircle);
}
 
function onClick(event:MouseEvent):void
{
        var sprite:Sprite = event.target as Sprite;
        if (sprite && sprite.parent == this)
        {
                super.removeChild(sprite);
        }
}


PinGV 15.12.2012 19:30

Про теги спасибо, буду знать, Zebestov спасибо вам за код, но прошу вас по-подробнее растолковать действия функции onClick

СлаваRa 15.12.2012 19:36

получаем target из event'а, пытаемся "привести" его к Sprite, если все хорошо и у sprite есть parent, и этим парентом являемся "мы", то удаляемся из его детей

ps
Вадим, отредактировал)

Zebestov 15.12.2012 19:39

PinGV, не следует цитировать такие "полотенца", когда и так понятно, о чем твой комментарий.
Подробней:

1. слушатель, как ты можешь видеть, мы повесили не на каждый шарик (чтобы у нас все же не было "Слушатели, много слушателей"), а на контейнер, в который мы эти шарики добавляем по таймеру.
2. чтобы контейнер стал как-бы неактивным, а на мышь реагировали только его "дети", мы указали ему mouseEnabled = false и mouseChildren = true.
3. в обработчике клика мы приводим источник клика к типу Sprite и, если это таки Sprite, и у него есть родитель, и этот родитель как раз тот контейнер, в который мы бросаем шарики, мы в данном случае можем утверждать, что это шарик из контейнера и его следует удалить, что мы и делаем.

Добавлено через 2 минуты
Слава, я немного поменял код в обработчике, бо там какая-то ахинея получилась: как может не быть parent-а у источника клика... по крайней мере в данном случае. На самом деле я хотел сделать проверку на то, является ли parent контейнером с шариками.


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

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