AS3 - 如何获取对聚合对象的容器的引用?

时间:2012-12-08 04:16:54

标签: actionscript-3

足够简单。

如果我有一个容纳Sprite对象的容器类,并且我将一个触摸侦听器附加到所述Sprite,是否有一种可靠且廉价的方法来获取包含Sprite的对象?我意识到我可以继承Sprite,但这不是我想要做的。

如果没有,如果我将事件监听器添加到包含它的类中的所述Sprite对象,是否有办法分派一个事件,允许我获取对容纳了被触摸的Sprite对象的容器的引用?

感谢您的帮助。

回复loxxxy:

当我说“持有”时,我的意思是聚合。例如:

public class Container 
    {
        [Embed(source = "img1.jpg")] private var img:Class;

        private var sprite:Sprite;
        private var bitmap:Bitmap;

        public function Container() 
        {
            bitmap = new img();
            sprite = new Sprite();
            sprite.addChild(bitmap);
        }

        public function GetSprite():Sprite
        {
            return sprite;
        }

    }

这是完全合法的代码。我想要做的是,当在Container类之外触摸Sprite对象时,我可以通过所述Sprite对象访问Container类中的其他属性。但是,我认为,一个坚实的解决方法将类似于以下内容:

public class Container extends InteractiveDisplayObject
    {
        [Embed(source = "img1.jpg")] private var img:Class;

        private var bitmap:Bitmap;

        public function Container() 
        {
            bitmap = new img();
this.addChild(bitmap);

        }
    }

然后,我可以通过监听Container类上的触摸事件来访问Container类的聚合对象,同时使其可以完全扩展到任何其他DisplayObject类(TextField,Sprite等)。

有一个非常具体的原因我想这样做,我只是觉得它与实际问题无关。当我有时间测试它时,我会尝试这种方法,看看它是怎么回事。谢谢!

1 个答案:

答案 0 :(得分:0)

您实际上并不需要为此目的派遣事件。

将事件监听器添加到容器&你可以参考容器和放大器精灵。例如:

container.addEventListener(MouseEvent.CLICK, container_touched, false, 0, true);

function container_touched(e) { 

    trace(e.target.name);            // Output : sprite
    trace(e.currentTarget.name);     // Output : container
}

编辑:

或者你可以通过添加如下函数来将sprite事件暴露给其他人:

public function registerCallback( callback:Function) {

    var thisRef = this; 

    sprite.addEventListener(MouseEvent.CLICK, function(e) {

         callback(thisRef);

    },false, 0, true);    
}