2014-09-02 151 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