4 Replies Latest reply: Jan 6, 2011 6:52 AM by polatkanfatih RSS

    click event dissappeared when filter applied

    polatkanfatih Community Member

      hi,

       

      i have a sprite having click event on it. when i apply dropShadowFilter, i couldnt click on it. it has mask too, so i cannot give filter to any other object in it.

       

      is there a solution for this?

        • 1. Re: click event dissappeared when filter applied
          Hakan KIRIK Community Member

          here is a sample for you:

           

          check it and see, everything works as expected...

           

          import flash.display.Sprite;
          import flash.events.MouseEvent;
          import flash.filters.DropShadowFilter;

          var sprite:Sprite=new Sprite();
          sprite.graphics.beginFill(0xcccccc);
          sprite.graphics.drawCircle(0,0,200);
          sprite.graphics.endFill();
          sprite.filters=[new DropShadowFilter()];

          addChild(sprite);

          sprite.addEventListener(MouseEvent.CLICK,fKlik);

          function fKlik(evt:MouseEvent)
          {
          trace("ok");
          }

          var sprite2:Sprite=new Sprite();
          sprite2.graphics.beginFill(0);
          sprite2.graphics.drawRect(30,30,30,30);
          sprite2.graphics.endFill();

          addChild(sprite2);


          sprite.mask=sprite2;

          • 2. Re: click event dissappeared when filter applied
            polatkanfatih Community Member

            i tried that in a blank document, it works, no problem. However, some problem appeared in my code. i animate my maskClip, can it be because of that. below is my code...

             

            package  {
                 
                 import flash.display.MovieClip;
                 import com.greensock.plugins.TweenPlugin;
                 import com.greensock.plugins.TransformMatrixPlugin;
                 import flash.events.MouseEvent;
                 import com.greensock.TweenLite;
                 import com.greensock.easing.Strong;
                 import com.greensock.TweenMax;
                 import flash.display.Loader;
                 import flash.events.Event;
                 import flash.events.IOErrorEvent;
                 import flash.net.URLRequest;
                 import flash.display.Shape;
                 import flash.display.Bitmap;
                 import flash.display.Sprite;
                 import flash.text.TextField;
                 import flash.utils.clearInterval;
                 import flash.utils.setInterval;
                 import flash.net.navigateToURL;
                 import flash.utils.setTimeout;
                 import flash.utils.clearTimeout;
                 import flash.filters.DropShadowFilter;
                 import com.greensock.plugins.DropShadowFilterPlugin;
                 
                 
                 public class PanelBase extends MovieClip {
                      
                      private const MIN_WIDTH          :Number = 100;
                      private const MIN_HEIGHT     :Number = 100;
                      
                      private const IMG_WIDTH          :Number = 263;
                      private const IMG_HEIGHT     :Number = 229;
                      
                      public  var closeX               :Number;
                      public  var closeY               :Number;
                      
                      public  var initW               :Number;
                      public  var initH               :Number;
                      
                      public  var openX               :Number;
                      public  var openY               :Number;
                      
                      private var openW               :Number = 480;
                      private var openH               :Number = 194;     
                      
                      public  var title               :String = '';
                      public  var link               :String = ''; 
                      public  var target               :String = '_blank'; 
                      public      var image               :Bitmap;
                      public  var id                    :int;
                      public      var rat                    :Number;
                      
                      private var timeout               :Number;
                      private var interval          :Number;
                      private var count               :int = 0;
                      private var isLoaded          :Boolean = false;
                      private var isOpen               :Boolean = false;
                      private var ratio               :Number;
                      private var loader               :Loader = new Loader();
                      private var mask_mc               :Shape = new Shape();
                      private var window               :Shape = new Shape();
                      private var bottom               :Bottom = new Bottom();
                      private var imageContainer     :Sprite = new Sprite();
                      private var world               :World = new World();
                      
                      
                      public function PanelBase() {
                           // constructor code
                           
                           
                           initW = width;
                           initH = height;
                           
                           buttonMode = true;
                           
                           mouseChildren = false;
                           
                           TweenPlugin.activate([TransformMatrixPlugin]);          
                           
                           //filters = [new DropShadowFilter()];
                           
                           addEventListener(MouseEvent.CLICK,onClick,false,0,true);
                           
                           addChild(imageContainer);
                           drawMask();
                           addChild(window);
                           addBottom();                              
                           
                           
                      }
                      
                      private function addBottom():void{
                           bottom.visible = false;
                           addChild(bottom);
                           
                      }
                      
                      private function drawMask():void{
                           
                           addChild(mask_mc);
                           
                           with(mask_mc.graphics){
                                
                                beginFill(0x000000);
                                drawRect(0,0,initW,initW);
                                endFill();
                           }
                           
                           mask = mask_mc;
                      }
                      
                      private function drawWindow(w:Number,h:Number):void{
                           
                           with(window.graphics){
                                clear();
                                lineStyle(15,0xFFFFFF);
                                moveTo(0,0);
                                lineTo(w,0);                    
                                lineTo(w,h);                    
                                lineTo(0,h);                    
                                lineTo(0,0);                    
                           }
                           
                      }
                      
                      private function drawSmallWindow(w:Number,h:Number):void{
                           
                           with(window.graphics){
                                clear();
                                lineStyle(5,0xFFFFFF);
                                moveTo(0,0);
                                lineTo(w,0);
                                lineTo(w,h);                    
                                lineTo(0,h);
                                lineTo(0,0);                    
                           }
                           
                      }
                      
                      public function loadImage(path:String):void{
                           
                           loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageComplete);
                           loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onImageError);
                           
                           loader.load(new URLRequest(path));
                      }
                      
                      private function onImageComplete(evt:Event):void{
                           
                           loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onImageComplete);
                           loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,onImageError);
                           
                           image = loader.content as Bitmap;
                           
                           
                           ratio = image.width / image.height;
                           
                           imageContainer.addChild(image);
                           
                           isLoaded = true;               
                           
                           if(isOpen){
                                resizeImage(IMG_WIDTH,openH);
                           }else{
                                resizeImage(initW,initH);
                           }
                           
                           
                           openImage();
                      }
                      
                      private function onImageError(evt:IOErrorEvent):void{
                           
                      }
                      
                      private function onClick(evt:MouseEvent):void{
                                          
                           if(!isOpen){
                                open();
                           }else{
                                if(link.length > 0){
                                     navigateToURL(new URLRequest(link),target);
                                }
                           }
                      }
                      
                      public function open():void{
                           
                           isOpen = true;
                           
                           Main(parent).closeAll(this);               
                           
                           if(isLoaded){
                                resizeImage(IMG_WIDTH,openH);
                                openImage();
                           }
                           
                           var nx:Number = openX + 50;
                           
                           bottom.visible = false;
                                     
                           
                           //TweenMax.to(this,.5,{x:openX,y:openY,ease:Strong.easeOut});          
                           TweenMax.to(this,.5,{x:openX,y:10,ease:Strong.easeOut});     
                           //TweenMax.to(mask_mc,.5,{width:20,height:20,ease:Strong.easeOut});          
                           TweenMax.to(mask_mc,.5,{width:openW,height:openH,ease:Strong.easeOut});
                           //TweenMax.to(mask_mc,.5,{delay:.6,width:openW,ease:Strong.easeOut});               
                           //TweenMax.to(this,1,{delay:.6,x:openX,ease:Strong.easeOut,onComplete:onOpenComplete});
                           
                           drawWindow(openW,openH);
                           setChildIndex(window,numChildren - 1);
                           onOpenComplete();
                      }
                      
                      private function openImage():void{
                           //imageContainer.x = -150;
                           //TweenMax.to(imageContainer,1,{x:0,ease:Strong.easeOut});
                           
                      }
                      
                      private function onOpenComplete():void{
                           
                           bottom.visible           = true;
                           bottom.bg.visible     = true;
                           bottom.txt.visible      = true;
                           bottom.txt.text          = '';
                           bottom.x                = openW - 30; 
                           bottom.y                = openH - 30;
                           setChildIndex(bottom,numChildren - 1);
                           timeout = setTimeout(Main(parent).openWorld,500);
                           //openText();
                           bottom.txt.text      = title;
                           
                           //bottom.gotoAndPlay(2);
                      }
                      
                      private function openText():void{
                           
                           interval = setInterval(setText,20);
                      }
                      
                      private function setText():void{
                           count++;
                           if(count != title.length + 1){
                                bottom.txt.text = title.substr(0,count);
                           }else{
                                clearInterval(interval);
                                count = 0;
                           }               
                           
                      }
                      
                      public function close():void{               
                      
                           clearInterval(interval);
                           clearTimeout(timeout);
                      
                           isOpen = false;
                           
                           if(isLoaded){
                                resizeImage(initW,initH);
                           }
                           bottom.visible = false;
                           
                           
                           TweenLite.to(this,.5,{x:closeX,y:closeY,ease:Strong.easeOut});
                           TweenMax.to(mask_mc,.5,{width:initW,height:initH,ease:Strong.easeOut,onComplete:onCloseComplete});
                           
                           drawSmallWindow(initW,initH);
                           setChildIndex(window,numChildren - 1);
                      }          
                      
                      private function onCloseComplete():void{
                           
                           bottom.visible           = true;
                           bottom.bg.visible     = false;
                           bottom.txt.visible  = false;
                           bottom.x                = initW - 30;
                           bottom.y               = initH - 29;
                           
                           setChildIndex(bottom,numChildren - 1);
                           
                      }
                      
                      public function resizeImage(w:Number,h:Number):void{
                           
                           image.width           = w;
                           image.height           = w / ratio;               
                           
                           if(image.height < h){
                                
                                image.height      = h;
                                image.width          = h *  ratio; 
                           }               
                           
                           image.x = w * .5 - image.width * .5;
                           image.y = h * .5 - image.height * .5;
                           
                      }
                      
                 }
                 
            }
            
             
            

            • 3. Re: click event dissappeared when filter applied
              Hakan KIRIK Community Member

              maskClip? Do you mean mask_mc ?

               

              i animated my mask also:

               

              import flash.display.Sprite;
              import flash.events.MouseEvent;
              import flash.filters.DropShadowFilter;
              import flash.events.Event;

              var sprite:Sprite=new Sprite();
              sprite.graphics.beginFill(0xcccccc);
              sprite.graphics.drawCircle(0,0,200);
              sprite.graphics.endFill();
              sprite.filters=[new DropShadowFilter()];

              addChild(sprite);

              sprite.addEventListener(MouseEvent.CLICK,fKlik);

              function fKlik(evt:MouseEvent)
              {
              trace("ok");
              }

              var sprite2:Shape=new Shape();
              sprite2.graphics.beginFill(0);
              sprite2.graphics.drawRect(30,30,30,30);
              sprite2.graphics.endFill();

              addChild(sprite2);


              sprite.mask=sprite2;

              sprite2.addEventListener(Event.ENTER_FRAME,fEnter);

              function fEnter(evt:Event)
              {
              sprite2.x+=0.5;
              }

              • 4. Re: click event dissappeared when filter applied
                polatkanfatih Community Member

                i handled it by another way, thanks for your interest////