Ячейки tileList отвечают на события мыши в as3 - PullRequest
1 голос
/ 10 мая 2011

Я делаю флэш-игру (которая в основном является версией той же самой игры), и я использовал tileList для доски, заполненной movieClip фигурами. Я бы хотел, чтобы фигуры отвечали на события mouseOver, mouseOut и mouseClick.

Посмотрев на другие вопросы / ответы, я понял, что мне понадобится кастом imageCell. Это путь? Я надеялся, что смогу получить ответы, которые хочу, поместив действия в самих movieClips, как показано ниже, но, похоже, это не работает. (Кстати, я новичок в сообществе, но несколько раз попадал сюда из поисков Google ... Спасибо за помощь, которую я уже получил от вас, замечательные люди. Приветствия.)

this.addEventListener(MouseEvent.MOUSE_OVER, OverHandler);
this.addEventListener(MouseEvent.MOUSE_OUT, OutHandler);
this.addEventListener(MouseEvent.CLICK, ClickHandler);

this.stop();

function OverHandler(event:MouseEvent):void
{
event.target.play();
}

function OutHandler(event:MouseEvent):void
{
event.target.stop();
}

function ClickHandler(event:MouseEvent):void
{
    event.target.play();
}

1 Ответ

0 голосов
/ 10 мая 2011

Я бы, вероятно, установил базовый класс для всех ваших фигур в игре, в которых есть события и они готовы .. Вот так:

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Piece extends MovieClip
    {
        /**
         * Constructor
         */
        public function Piece()
        {
            addEventListener(MouseEvent.CLICK, _click);
            addEventListener(MouseEvent.ROLL_OVER, _rollOver);
            addEventListener(MouseEvent.ROLL_OUT, _rollOut);
        }

        /**
         * Called on MouseEvent.CLICK
         */
        protected function _click(e:MouseEvent):void
        {
            trace(this + " was clicked");
        }

        /**
         * Called on MouseEvent.ROLL_OVER
         */
        protected function _rollOver(e:MouseEvent):void
        {
            trace(this + " was rolled over");
        }

        /**
         * Called on MouseEvent.ROLL_OUT
         */
        protected function _rollOut(e:MouseEvent):void
        {
            trace(this + " was rolled off");
        }

        /**
         * Destroys this
         */
        public function destroy():void
        {
            // listeners
            addEventListener(MouseEvent.CLICK, _click);
            addEventListener(MouseEvent.ROLL_OVER, _rollOver);
            addEventListener(MouseEvent.ROLL_OUT, _rollOut);

            // from DisplayList
            if(parent) parent.removeChild(this);
        }
    }
}

Если вам нужно щелкнуть, roll_over или roll_out, чтобысделать что-то уникальное для определенных частей, просто расширить и сделать это:

package
{
    import flash.events.MouseEvent;

    public class MyPiece extends Piece
    {
        override protected function _click(e:MouseEvent):void
        {
            trace("mypiece was clicked");
        }
    }
}
...