【问题标题】:Adding an eventListener to a object created by a function将 eventListener 添加到由函数创建的对象
【发布时间】:2013-04-09 23:57:02
【问题描述】:

我环顾了几个不同的主题,似乎找不到任何适合我的东西。我对 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 事件不起作用。如果我手动添加树(即不通过函数)并手动添加偶数侦听器,它就可以工作。我认为这是某种封装问题,但我不确定如何解决它。创建树需要通过函数来​​完成,因为游戏需要在某些时候添加树。

如何让点击事件对我添加到舞台的所有树起作用?

【问题讨论】:

    标签: actionscript-3 flash flash-builder


    【解决方案1】:

    这似乎应该有效。点击后会调用chopWood 方法吗?在chopWood 的开头添加一个跟踪来测试它。

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

    【讨论】:

    • 谢谢!我一直假设没有调用chopWood,但确实如此。我将其更改为“e.currentTarget as Tree”,效果很好!遗憾的是,我在 Adob​​e 的帮助中没有看到“currentTarget”,而是选择了“relatedObject”。
    • 不用担心。 MouseEvent 实际上扩展了Event,而currentTargetEvent 的一个属性。在 AS3 文档中,确保单击属性列表开头的“显示继承的公共属性”,以获取可用属性的完整列表。
    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多