0

很简单。

如果我有一个包含 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;
        }

    }

这是完全合法的代码。我想要做的是,当 Sprite 对象在 Container 类之外被触摸时,我可以通过所述 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 等)。

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

4

1 回答 1

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);    
}
于 2012-12-08T06:43:04.613 回答