#006 ActionScript [Q] Tips: contains()

Este tip es muy directo ya que simplemente comentaré uno de los métodos que obtienen todos las clases que extienden de DisplayObjectContainer, ya sean propias o las consabidas Stage, Sprite, Loader y MovieClip.

En realidad lo interesante de esta función es que no solamente funciona para descendientes directos en la jerarquia de la Display List, sino que busca el resultado en todos los descendientes. Veamos un ejemplo:

var abuelito:Sprite = new Sprite();
var padre:Sprite = new Sprite();
var nieto:Sprite = new Sprite();
var unoQuePasabaPorAlli:Sprite = new Sprite();

padre.addChild(nieto);
abuelito.addChild(padre);
addChild(abuelito);
addChild(unoQuePasabaPorAlli);

trace(abuelito.contains(padre)); // true
trace(abuelito.contains(nieto)); // true
trace(abuelito.contains(unoQuePasabaPorAlli)); // false 

Como vemos aunque pasemos como parámetro un elemento de la Display List que no es un descendiente directo del elemento sobre el que buscamos, el resultado es igualmente válido, con lo que esta función nos permite conocer a cualquier nivel si un elemento de la Display List contiene a otro elemento de la misma.

Hay que tener en cuenta que quien llama a contains tiene que ser un objeto de una clase que herede en algún nivel de DisplayObjectContainer, pero el objeto que buscamos en su interior no tiene por qué serlo (por ejemplo un campo de texto). Además aunque en el ejemplo haya añadido abuelito a la DisplayList, contains funciona aunque el contenedor no forme parte de ella (y por tanto ninguno de sus descendientes), con lo que aunque hay usado Display List no es necesariamente estricto (lo siento, me surge llamarlo así aunque los elementos no estén en pantalla).

Tags