Hola
asturkon35 !
Esto pasa por la propagación del evento, si le has asignado a tu instancia 'c' que escuche por el evento mousedown, también será aplicado a las intancias internas, en este caso sería la instancia 'letra'.
Cuando presionas el mouse sobre la instancia 'letra', el evento se propaga hasta la función arrastrar, el evento propagado tiene una atributo target que hace referencia al objeto que presionaste.
Si presionas la instancia letra esto es lo que pasa:
Código actionscript:
Ver originalfunction arrastrar(evt:MouseEvent):void {
trace(evt.target); //Event.target hace referencia a la instancia letra.
evt.target.startDrag(); //Como la instancia letra no cuenta con el método startDrag(), el programa lanza una excepción.
}
Si le das click en cambio al sprite, todo funcionara perfecto porque este si cuenta con el método startDrag.
Una forma de solucionarlo es decirle a tu instancia 'letra' que no propage los eventos generados por el mouse, esto lo haces con el atributo mouseEnabled.
Deberás cambiarlo a false:
Código actionscript:
Ver originalvar c:Sprite = new Sprite();
var letra:TextField=new TextField();
letra.mouseEnabled = false; //Aquí el truco
c.graphics.beginFill(0x000000);
c.graphics.drawCircle(100, 100, 50);
c.addEventListener(MouseEvent.MOUSE_DOWN,arrastrar);
c.addEventListener(MouseEvent.MOUSE_UP,soltar);
letra.text="A";
letra.selectable=false;
c.addChild(letra);
addChild(c);
function arrastrar(evt:MouseEvent):void {
evt.target.startDrag();
}
function soltar(evt:MouseEvent):void {
evt.target.stopDrag();
}
Otra forma, sería que cambiaras event.target, por la instancia 'c', en tus 2 funciones arrastrar y soltar:
Código actionscript:
Ver originalfunction arrastrar(evt:MouseEvent):void {
c.startDrag();
}
function soltar(evt:MouseEvent):void {
c.stopDrag();
}
Un saludote !