Events 难以将事件附加到以编程方式创建的MovieClip

Events 难以将事件附加到以编程方式创建的MovieClip,events,actionscript,dynamic,constructor,Events,Actionscript,Dynamic,Constructor,这一直困扰着我,我似乎无法在寻找解决方案时提出正确的问题!问题很简单:为什么我不能将事件附加到ActionScript3中以编程方式创建的MovieClip?这一定是我缺少的基本东西,对吧 package { //imports import flash.display.*; import flash.events.*; //document class public class Document extends MovieClip {

这一直困扰着我,我似乎无法在寻找解决方案时提出正确的问题!问题很简单:为什么我不能将事件附加到ActionScript3中以编程方式创建的MovieClip?这一定是我缺少的基本东西,对吧

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

测试仍然是一个空的电影剪辑,请尝试向其中添加绘图内容:

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

啊哈..我假设drawRect实际上提供了电影剪辑内容,因为测试剪辑返回宽度和高度,并显示不透明的背景色。但它仍然是空的,没有什么填充物?尽管如此,还是很有魅力,非常感谢o) @Casey Yee:您可以在您的解决方案中采用他的实用函数
setDimensions
setBgColor
。-)@DanielB,是的,你是对的,我甚至没想过要检查函数在做什么哈哈!因此,没有填充的MovieClip没有维度,但在设置drawRect和opaqueBackground属性时仍然可见。此电影剪辑将设置高度和宽度属性,但仍不存在actionscript代码中单击事件的属性?基于所有这些,我不知道如何调用组合的setDimensions/setBgColor函数……lol.@Casey-setDimension函数将您想要绘制的任何内容作为参数,所以我想我实际上是在绘制一个矩形。看起来填充是关键,没有填充的对象没有任何可点击的东西,哪一种才有意义?大概再次感谢您的时间和帮助o)