Dije muy rápido que no se podía, y no es cierto.
La idea es tener en dos variables "ancho" y "alto" el width y height del sprite.
Cuando añadimos algo dentro de él, comprobamos si ancho!=width o alto!=height. Caso de que sea así es que ha cambiado de tamaño.
Se puede hacer en la película principal directamente sin necesidad de dispatchar un evento
Código ActionScript :
var content:SpriteContent=new Spritecontent()
var alto:Number;
var ancho:Number;
//una vez añadido lo que sea, un simple "if"
if (alto!=content.width || ancho!=content.height){
alto=content.width
ancho=content.height
trace("Ha cambiado de tamaño")
}
Vamos a hacerlo más compacto. Vamos ha hacer una Clase que extienda de Sprite
Código ActionScript :
package{
public class SpriteContent extends Sprite{
private var alto:Number;
private var ancho:Number;
public static const CHANGE_TAMANO:String = "Cambio_tamano";
public function SpriteContent(){
}
public function comprobarTamano():void{
if (ancho!=width || alto!=height){
dispatchEvent(new Event(CHANGE_TAMANO))
ancho=width
alto=height
}
}
}
}
Así, nuestra película principal sería algo como
Código ActionScript :
var content:SpriteContent=new Spritecontent()
content.addEventListener(CHANGE_TAMANO,cambioTamano)
function cambioTamano(e:Event){
trace(e.target.width+":"+e.target.height)
}
//en algún momento
//si tenemos un MC, p.e.
var mc:MovieClip=new MovieClip()
mc.graphics.lineStyle (1,0x000000,1);
mc.graphics.beginFill (0x00ff00,.5);
mc.graphics.drawRect (0, 0, 50, 50);
//cuando añadimos un MC
content.addChild(mc)
//llamamos al método comprobarTamano
content.comprobarTamano()
Vale, valos a darle una "vuelta de tuerca", esto es, sobre-escribir el método "addChild" -también deberíamos sobre-escribir el addchildAt- y los "setters" de width y height, scaleX y scaleY
Código ActionScript :
package {
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.events.Event;
public class SpriteContent extends Sprite {
private var alto:Number;
private var ancho:Number;
public static const CHANGE_TAMANO:String = "Cambio_tamano";
public function SpriteContent(){
}
public override function addChild(child:DisplayObject):DisplayObject {
var mc:DisplayObject = super.addChild(child);
comprobarTamano();
return mc;
}
public override function set width(value:Number):void
{
super.width = value;
comprobarTamano();
}
public override function set scaleX(value:Number):void
{
super.scaleX = value;
comprobarTamano();
}
public override function set scaleY(value:Number):void
{
super.scaleY = value;
comprobarTamano();
}
public override function set rotate(value:Number):void
{
super.rotate= value;
comprobarTamano();
}
private function comprobarTamano():void{
if (ancho!=width || alto!=height){
dispatchEvent(new Event(CHANGE_TAMANO))
ancho=width
alto=height
}
}
}
}
Así, siempre comprobará el tamaño cuando hagamos un addChild o cambiemos el tamaño.
¡OJO!, si movemos algo en el INTERIOR del "content" No "dispatchará" el evento. La solución que le veo es hacer el "método" "comprobarTamano()" public y llamar en ese caso al método después de mover el objeto