代码之家  ›  专栏  ›  技术社区  ›  sbatson5

向函数创建的对象添加eventListener

  •  1
  • sbatson5  · 技术社区  · 12 年前

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

    如何让点击事件在我添加到后台的所有树上工作?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Adam Harte    12 年前

    这似乎应该奏效。chopWood方法会在点击时调用吗?在的开头放一个痕迹 chopWood 来测试这一点。

    如果 肖普伍德 正在被呼叫,然后我可以看到一件奇怪的事情。我不太确定是什么 e.relatedObject 是的。我想你会想要 e.currentTarget as Tree 。您也可以省略 stage.removeChild(e.relatedObject); 线它应该只是将它添加到您的Main类的子类中。