0

我是一个 AS3 菜鸟,只是想更舒适地使用 Flash 中的事件处理程序并将交互性构建到我的应用程序中。

在下面的代码中,我创建了一个名为 LineChart1 的 DrawLineChart 类的实例。当我测试这部电影时,它会很好地显示在舞台上,当我单击它时,我可以使用跟踪命令将字符串语句写入输出窗口。

但是,现在我希望能够在舞台上单击 LineChart1 并将其删除。当我这样做时,我收到一条错误消息 1120:未定义属性 LineChart1 的访问。

有人可以向我解释为什么我无法引用我的实例 LineChart1 以及我需要做什么才能引用它并在单击它时将其删除?另外,我很想知道为什么在运行时单击 LineChart1 时跟踪语句有效,而不是 removechild 命令。

如果这个问题太简单了,我很抱歉,但提前感谢大家的帮助。对此,我真的非常感激。

package{
import flash.display.*;
import flash.events.*;

public class Main extends MovieClip{ 

var recWidth:Number = 250;
var recHeight:Number = 550;
var recX:Number = 50;
var recY:Number = 50;
var recScaleY:Number = 30;

public function Main(){

var LineChart1 = new DrawLineChart(recX, recY, recWidth, recHeight, recScaleY);
LineChart1.addEventListener(MouseEvent.CLICK, onClickHandler);
addChild(LineChart1);
}

function onClickHandler(e:Event):void{
trace("hello"); // This works.  When I click on the LineChart1 MovieClip on the stage during runtime, I get "hello" as an output.
removeChild(LineChart1); // throws an error 1120: Access of undefined property LineChart1.  Why?  
}
}
}
4

3 回答 3

0

您的问题是您已将 LineChart1 定义为局部变量。这意味着因为您在函数中声明它,所以它仅在该函数中可见。

为您的类创建一个属性,然后您将LineChart1能够从事件处理程序中看到它。或者,使用e.target as DrawLineChart.

于 2011-07-07T18:02:26.813 回答
0

您的变量在本地范围为Main,您需要将其声明为实例变量(类级别),以正确定义其范围。

private var _lineChart1:DrawLineChart; 

//main function
_lineChart1 = new DrawLineChart(...

//handler function
this.removeChild(_lineChart1);

有关 AS3 范围的更多信息=请查看livedocs

干杯

于 2011-07-07T18:03:20.007 回答
0

所有答案都很好,但如果你在舞台上还有一个以上,你能做什么?您可以使用一个数组来获取您的 mc 列表,然后您可以使用该数组来删除舞台上的 mc。这是一个简单的例子:

  package
 {

    import flash.display.*;

    import flash.events.*;

    public class Main extends MovieClip{ 

    private var recWidth:Number = 250;
    private var recHeight:Number = 550;
    private var recX:Number = 50;
    private var recY:Number = 50;
    private var recScaleY:Number = 30;
    private var lineArray:Array = new Array();

    public function Main()
    {
        for(var i:int = 0;i<10;i++)
        {
            var LineChart1 = new DrawLineChart(recX, recY, recWidth, recHeight, recScaleY);
            LineChart1.addEventListener(MouseEvent.CLICK, onClickHandler);
            LineChart1.name = line+i.toString(); // u can use whatever u want for name's
            lineArray.push(lineChart1);
            addChild(LineChart1);
        }
        //if u want to place this 10 LineChart1 u can set x and y values like recX += recX and ect.
    }
    private   function onClickHandler(e:Event):void
    {
        //when u click one of your LineChart1 and want to remove it from stage u can use this
        trace(e.currentTarget.name); // if u want to see what is the name of ur mc
        var myId:String = e.currentTarget.name.substring(4,10);
        removeChild(getChildByName("line"+myId));
    }
}

希望它对你有用

于 2015-08-13T22:12:18.487 回答