【问题标题】:AS3 MovieClip click event not workingAS3 MovieClip 点击事件不起作用
【发布时间】:2014-10-27 00:56:30
【问题描述】:

我正在使用 as3 制作 Flash 滑块,但无法触发单击 MovieClip 的 click 事件。

当目标是舞台而不是任何 MC 时,点击事件可以完美运行。

以下是项目中的所有代码。

有问题的部分朝向 SLIDER.as 的底部

canvas.addEventListener(MouseEvent.CLICK, this.canvasClick);

舞台和图书馆都是空的。提前谢谢你。

PS:我对 Flash 还很陌生。

MAIN.AS

package  {

import flash.display.MovieClip;
import flash.events.Event;


public class Main extends MovieClip {

    public function Main() {
        addEventListener(Event.ADDED_TO_STAGE, init)
    }

    private function init(e:Event){
        var images:Array = new Array("./media/engines/Engines-1.jpg", "./media/engines/Engines-2.jpg", "./media/engines/Engines-3.jpg", "./media/engines/Engines-4.jpg", "./media/engines/Engines-5.jpg", "./media/engines/Engines-6.jpg", "./media/engines/Engines-7.jpg", "./media/engines/Engines-8.jpg", "./media/engines/Engines-9.jpg", "./media/engines/Engines-10.jpg", "./media/engines/Engines-11.jpg", "./media/engines/Engines-12.jpg", "./media/engines/Engines-13.jpg");
        var slider:Slider = new Slider(stage, images);          
    }
}

}

SLIDER.AS

package  {

import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.events.MouseEvent;

public class Slider extends MovieClip {

    private var images:Array;
    private var STAGE:Stage;

    private var stageWidth:Number;
    private var stageHeight:Number;
    private var centerX:Number;
    private var centerY:Number;
    private var tsHeight:Number = 100;
    private var tsPadding:Number = 10;


    public function Slider(stageGlobal, imageConfig:Array) {
        this.STAGE = stageGlobal;
        this.images = imageConfig;

        this.stageWidth = this.STAGE.stageWidth;
        this.stageHeight = this.STAGE.stageHeight;

        this.centerX    = this.stageWidth / 2;
        this.centerY = this.stageHeight / 2;

        this.createCanvas();
    }

    public function createCanvas():void {
        // SLIDER HOLDER
        var canvas:MovieClip = new MovieClip();
        canvas.graphics.drawRoundRect(0, 0, this.stageWidth, this.stageHeight, 15, 15);
        canvas.opaqueBackground = 0xDDDDDD;
        canvas.mouseEnabled = true;
        this.STAGE.addChild(canvas);


        // HEADER / TITLE HOLDER
        var header:MovieClip = new MovieClip();
        header.graphics.drawRoundRect(0, 0, this.stageWidth, 40, 15, 15);
        header.opaqueBackground = 0x000000;

        canvas.addChild(header);


        // FOOTER ACTION HOLDER
        var footer:MovieClip = new MovieClip();
        footer.graphics.drawRoundRect(0, this.stageHeight - 40, this.stageWidth, 40, 15, 15);
        footer.opaqueBackground = 0x000000;

        canvas.addChild(footer);

        // THUMBSTRIP HOLDER
        var thumbstrip:MovieClip = new MovieClip();
        thumbstrip.graphics.drawRoundRect(0, this.stageHeight - 160, this.stageWidth, 120, 15, 15);
        thumbstrip.opaqueBackground = 0x555555;

        canvas.addChild(thumbstrip);

        canvas.addEventListener(MouseEvent.CLICK, this.canvasClick);
    }

    private function canvasClick(e:MouseEvent):void {
        trace(e);
    }

}

}

【问题讨论】:

    标签: actionscript-3 flash actionscript


    【解决方案1】:

    这可能与您绘制影片剪辑的方式有关。

    来自文档:“不透明背景区域不响应鼠标事件。”

    尝试像这样绘制矩形:

            // SLIDER HOLDER
            var canvas:MovieClip = new MovieClip();
            canvas.graphics.beginFill(0xDDDDDD);
            canvas.graphics.drawRoundRect(0, 0, this.stageWidth, this.stageHeight, 15, 15);
            canvas.graphics.endFill();
            canvas.mouseEnabled = true;
            this.STAGE.addChild(canvas);
    

    【讨论】:

    • 我的想法也是如此。 @AhmadAmin - 你试过了吗?
    • 这是问题的解决方案。非常感谢您的帮助。
    【解决方案2】:

    你需要在将滑块添加到舞台后添加事件,所以你需要在滑块类中编写

    package  {
    
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
        public class Slider extends MovieClip {
    
            private var images:Array;
            private var STAGE:Stage;
    
            private var stageWidth:Number;
            private var stageHeight:Number;
            private var centerX:Number;
            private var centerY:Number;
            private var tsHeight:Number = 100;
            private var tsPadding:Number = 10;
    
    
            public function Slider(stageGlobal, imageConfig:Array) {
    
                this.STAGE = stageGlobal;
                this.images = imageConfig;
                this.addEventListener(Event.ADDED_TO_STAGE, added);
    
            }
    
            public function added(e:Event)
            {
    
    
                this.stageWidth = this.STAGE.stageWidth;
                this.stageHeight = this.STAGE.stageHeight;
    
                this.centerX    = this.stageWidth / 2;
                this.centerY = this.stageHeight / 2;
    
                this.createCanvas();
            }
    
            public function createCanvas():void {
                // SLIDER HOLDER
                var canvas:MovieClip = new MovieClip();
                canvas.graphics.drawRoundRect(0, 0, this.stageWidth, this.stageHeight, 15, 15);
                canvas.opaqueBackground = 0xDDDDDD;
                canvas.mouseEnabled = true;
                this.STAGE.addChild(canvas);
    
    
                // HEADER / TITLE HOLDER
                var header:MovieClip = new MovieClip();
                header.graphics.drawRoundRect(0, 0, this.stageWidth, 40, 15, 15);
                header.opaqueBackground = 0x000000;
    
                canvas.addChild(header);
    
    
                // FOOTER ACTION HOLDER
                var footer:MovieClip = new MovieClip();
                footer.graphics.drawRoundRect(0, this.stageHeight - 40, this.stageWidth, 40, 15, 15);
                footer.opaqueBackground = 0x000000;
    
                canvas.addChild(footer);
    
                // THUMBSTRIP HOLDER
                var thumbstrip:MovieClip = new MovieClip();
                thumbstrip.graphics.drawRoundRect(0, this.stageHeight - 160, this.stageWidth, 120, 15, 15);
                thumbstrip.opaqueBackground = 0x555555;
    
                canvas.addChild(thumbstrip);
    
                canvas.addEventListener(MouseEvent.CLICK, canvasClick);
            }
    
            private function canvasClick(e:MouseEvent):void {
                trace(e);
            }
    
        }
    
    }
    

    希望对你有帮助:)

    【讨论】:

    • 感谢您的浏览。 this.addEventListener(Event.ADDED_TO_STAGE, 添加);没有被解雇,也没有给出错误。
    • 我试过没有这个和 this.STAGE.addEventListener 并且没有工作。我还尝试了 canvas.addEventListener(Event.ADDED_TO_STAGE, func) ,它正在工作,但在触发之后 MouseEvent.CLICK 仍然不是工作事件。
    • 在添加到舞台之前/之后添加点击事件监听器将具有相同的最终结果。您的回答实际上根本不会改变行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2018-06-15
    • 2017-08-22
    • 2012-11-07
    • 2018-03-06
    相关资源
    最近更新 更多