Событие Mouse_down не запускается в AS3 - PullRequest
0 голосов
/ 30 марта 2011

У меня есть код, написанный на AS3.Моя цель - щелкнуть по этапу MainTimeline и запустить trace() в функции runDraw().На данный момент событие MOUSE_DOWN никогда не запускается, и я не могу понять это.

Обновление кода :

package circles
{
    import flash.display.Sprite;
    import flash.events.*;
    import flash.geom.Point;
    import flash.display.DisplayObjectContainer;
    import flash.display.MovieClip;

    public class Circles extends Sprite
    {
        var circCentre:Sprite = new Sprite();
        var circOuter:Sprite = new Sprite();
        var point:Sprite = new Sprite();

        trace("Class stuff initilized");

        function Circles():void
        {   
            this.addEventListener(MouseEvent.MOUSE_DOWN, runDraw);
            trace("Constructor done");
        }

        function runDraw(e:MouseEvent):void
        {
            trace("runDraw(e)");
            // centre circle draw and add to timeline
            circCentre.graphics.lineStyle(3, 0x000000);
            circCentre.graphics.beginFill(0xFF6600);
            circCentre.x = e.stageX;
            circCentre.y = e.stageY;
            circCentre.graphics.drawCircle(e.stageX, e.stageY, 100);
            circCentre.graphics.endFill();
            this.addChild(circCentre);
            trace("mc.addChild(circCentre)");

            // smaller outer circle
            circCentre.addChild(circOuter);
            // attach to parent;
            circOuter.graphics.lineStyle(1, 0xDD2211);
            circOuter.graphics.beginFill(0x66FF00);
            circOuter.x = 200;
            circOuter.y = e.stageY;
            circOuter.graphics.drawCircle(200, e.stageY, 50);
            circOuter.graphics.endFill();

            // the draw point;
            circOuter.addChild(point);
            point.graphics.moveTo(5, 0);
            point.graphics.lineTo(5, 10);
            point.graphics.moveTo(0, 5);
            point.graphics.lineTo(10, 5);
            point.x = 50;
            point.y = 90;
            stage.addEventListener(Event.ENTER_FRAME, rotationDraw);
            stage.addEventListener(MouseEvent.MOUSE_UP, finish);
        }

        public function rotationDraw(e:Event):void
        {
            circCentre.rotation++;
            circOuter.rotation++;
        }

        public function finish(e:MouseEvent):void
        {
            stage.removeEventListener(Event.ENTER_FRAME, rotationDraw);
        }
    }
}

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Следующие работы (я изменил ваш код класса).

Timeline

var c:Circles = new Circles(stage);
addChild(c);

Файл класса

// removed package name for testing
package
{
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.*;
    import flash.geom.Point;
    import flash.display.DisplayObjectContainer;
    import flash.display.MovieClip;

    public class Circles extends Sprite
    {
        var circCentre:Sprite = new Sprite();
        var circOuter:Sprite = new Sprite();
        var point:Sprite = new Sprite();

        var _stage:Stage;

        // shouldn't really have trace statements out here
        trace("Class stuff initilized");

        function Circles(stage:Stage):void
        {   
            _stage = stage;

            _stage.addEventListener(MouseEvent.MOUSE_DOWN, runDraw);
            trace("Constructor done");
        }

        function runDraw(e:MouseEvent):void
        {
            trace("runDraw(e)");
            // centre circle draw and add to timeline
            circCentre.graphics.lineStyle(3, 0x000000);
            circCentre.graphics.beginFill(0xFF6600);
            circCentre.x = e.stageX;
            circCentre.y = e.stageY;
            circCentre.graphics.drawCircle(e.stageX, e.stageY, 100);
            circCentre.graphics.endFill();
            _stage.addChild(circCentre);
            trace("mc.addChild(circCentre)");

            // smaller outer circle
            circCentre.addChild(circOuter);
            // attach to parent;
            circOuter.graphics.lineStyle(1, 0xDD2211);
            circOuter.graphics.beginFill(0x66FF00);
            circOuter.x = 200;
            circOuter.y = e.stageY;
            circOuter.graphics.drawCircle(200, e.stageY, 50);
            circOuter.graphics.endFill();

            // the draw point;
            circOuter.addChild(point);
            point.graphics.moveTo(5, 0);
            point.graphics.lineTo(5, 10);
            point.graphics.moveTo(0, 5);
            point.graphics.lineTo(10, 5);
            point.x = 50;
            point.y = 90;
            _stage.addEventListener(Event.ENTER_FRAME, rotationDraw);
            _stage.addEventListener(MouseEvent.MOUSE_UP, finish);
        }

        public function rotationDraw(e:Event):void
        {
            circCentre.rotation++;
            circOuter.rotation++;
        }

        public function finish(e:MouseEvent):void
        {
            _stage.removeEventListener(Event.ENTER_FRAME, rotationDraw);
        }
    }
}
0 голосов
/ 30 марта 2011

mc MovieClip не имеет размеров, поэтому нет события, чтобы сработало событие MOUSE_DOWN. Вы должны нарисовать эту область попадания. Попробуйте это:

mc.graphics.beginFill(0xFFFFFF,0);
mc.graphics.drawRect(0,0,800,600);//change 800,600 to whatever is your stage size
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...