2011-11-17 2 views
0

Cela m'a vraiment énervé et je n'arrive pas à poser la bonne question en cherchant une solution! Le problème est assez simple: Pourquoi ne puis-je pas attacher un événement à un MovieClip créé par programme dans Actionscript 3? Cela doit être quelque chose de fondamental qui me manque, non?Difficulté à attacher un événement à un MovieClip créé par programme

package { 

    //imports 
    import flash.display.*; 
    import flash.events.*; 

    //document class 
    public class Document extends MovieClip { 

     //variables 
     public var utilities:Object; 
     public var test:MovieClip; 

     //constructor 
     public function Document() 
     { 

      //instantiate the utilities object - this will contain some 
      //simple functions for setting dimensions and background color of 
      //a display object. 
      this.utilities = new Object(); 

      //utility function: set dimensions. 
      this.utilities.setDimensions = function(what:*, width:uint, height:uint) 
      { 
       what.graphics.drawRect(0, 0, width, height); 
      } 

      //utility function: set opaque background color. 
      this.utilities.setBgColor = function(what:DisplayObject, color:uint) 
      { 
       what.cacheAsBitmap = true; 
       what.opaqueBackground = color; 
      } 

      //create/add a test movie clip. 
      test = new MovieClip(); 

      //set dimensions and background color of the test movie clip. 
      this.utilities.setDimensions(test, 100, 100); 
      this.utilities.setBgColor(test, 0xff0000); 

      //add test movie clip to document class. 
      this.addChild(test); 

      //add a click event to the test movie clip. 
      test.addEventListener(MouseEvent.CLICK, onClick); 

     } 

     //click event handler 
     private function onClick(evt:Event):void 
     { 
      trace('click'); 
     } 
    } 
} 

//update based on Casey Yee's answer 
//the set dimension function needs to contain a fill to be clickable 
//a fill is added with alpha set to zero to maintain transparency. 

//utility function: set dimensions 
this.utilities.setDimensions = function(what:*, width:uint, height:uint) 
{ 
    what.graphics.beginFill(0x000000, 0); 
    what.graphics.drawRect(0, 0, width, height); 
    what.graphics.endFill(); 
} 

Répondre

2

test est encore un clip vide, essayez d'ajouter dessin quelque chose en elle:

test = new MovieClip(); 
test.graphics.beginFill(0xFF0000); 
test.graphics.drawRect(0,0,100,100); 
test.graphics.endFill(); 
+0

Ahhh..I supposait que drawRect a effectivement donné le contenu du clip que le rendement clip d'essai largeur et hauteur et affiche une couleur de fond opaque. Mais il est encore vide sans avoir une sorte de remplissage? Travaillé comme un charme, merci beaucoup. : o) – Michael

+0

@Casey Yee: vous pourriez avoir adopté ses fonctions utilitaires 'setDimensions' et' setBgColor' dans votre solution ;-) – DanielB

+0

@DanielB, oui vous avez raison, je n'ai même pas pensé à vérifier ce que faisaient les fonctions haha! –

Questions connexes