足够简单。
如果我有一个容纳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等)。
有一个非常具体的原因我想这样做,我只是觉得它与实际问题无关。当我有时间测试它时,我会尝试这种方法,看看它是怎么回事。谢谢!
答案 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);
}