1

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

我怎样才能让点击事件在我添加到舞台的所有树上工作?

4

1 回答 1

2

这似乎应该工作。点击后会调用chopWood 方法吗?在开头放一个跟踪chopWood来测试它。

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

于 2013-04-10T00:59:02.507 回答