2014-09-02 159 views
0

我正在使用as3制作Flash滑块,无法获取单击事件以点击MovieClip。AS3 MovieClip单击事件不起作用

点击事件在瞄准舞台时非常完美,但没有任何MC。

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

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

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

的阶段和库都为空的底部。先谢谢你。 PS:我很新的闪光灯。

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); 
    } 

} 

} 

回答

4

它可能与您绘制动画片段的方式有关。

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

尝试绘制矩形这样的:

 // 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); 
+0

我的想法也是如此。 @AhmadAmin - 你试过这个吗? – BadFeelingAboutThis 2014-09-02 23:25:50

+0

这是解决问题的方法。非常感谢您的帮助。 – 2014-09-10 06:53:28

0

您需要添加事件后滑块加入你需要写

滑块类舞台以
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); 
     } 

    } 

} 

我希望它会帮助:)

+0

感谢您考虑看看。 this.addEventListener(Event.ADDED_TO_STAGE,added);没有被解雇,也没有给出任何错误。 – 2014-09-02 19:04:04

+0

对不起,你不介意尝试它吗? – mGolzadh 2014-09-02 19:21:57

+0

我尝试没有这个,也this.STAGE.addEventListener和没有工作。 我也试过canvas.addEventListener(Event.ADDED_TO_STAGE,func)这是工作,但MouseEvent.CLICK仍然不是工作事件后,被解雇。 – 2014-09-02 19:29:32