Events 难以将事件附加到以编程方式创建的MovieClip
这一直困扰着我,我似乎无法在寻找解决方案时提出正确的问题!问题很简单:为什么我不能将事件附加到ActionScript3中以编程方式创建的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 {
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)