将eventListener添加到由函数创建的对象

时间:2013-04-09 23:57:03

标签: actionscript-3 flash flash-builder

我已经环顾了几个不同的线程,似乎找不到任何适合我的东西。我对ActionScript相当新,所以这可能很明显。对于练习,我试图做一个简单的游戏。在游戏中,您可以砍伐树木以添加到“木材”资源中。这是树类:

 package
 {
    import flash.display.DisplayObject;
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class Tree extends Sprite
    {

    //Embed the gameObject image
    [Embed(source="../images/tree.png")]
    public var GameObjectImage:Class;
    public var gameObjectImage:DisplayObject = new GameObjectImage();
    public var gameObject:Sprite = new Sprite();

    public function Tree()
    {
        gameObject.addChild(gameObjectImage);
        this.addChild(gameObject);
    }
}
 }

然后,我在Main.as调用'createTree'

中创建一个函数
    public function createTree (xPos:int, yPos:int):void
    {
        var treeName:Tree = new Tree();
        treeName.x = xPos;
        treeName.y = yPos;
        treeName.addEventListener(MouseEvent.CLICK, chopWood);
        stage.addChild(treeName);
    }

我有一个名为'chopWood'的功能来移除树。

    public function chopWood(e:MouseEvent):void
    {
        wood++;
        stage.removeChild(e.relatedObject);
        updateResources();
    }

在构造函数中,我添加了一个树。

        createTree(100,100);

它确实将树添加到x:100 y:100。但Click事件不起作用。如果我手动添加树(即不通过函数)并手动添加偶数监听器,它就可以工作。我认为这是某种封装问题,但我不知道如何解决它。创建树需要通过函数来​​完成,因为游戏需要在某个时刻添加树。

如何让click事件适用于我添加到舞台的所有树?

1 个答案:

答案 0 :(得分:2)

这似乎应该有效。 chopWood方法是否在点击时被调用?在chopWood的开头跟踪以测试它。

如果正在调用chopWood,那么我可以看到一件奇怪的事情。我不太确定e.relatedObject是什么。我想你会想e.currentTarget as Tree。您也可以省略stage.removeChild(e.relatedObject);行中的“阶段”。它应该只是作为Main类的子项添加它。