Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/06/2010, 09:50
Josalv
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 13 años, 10 meses
Puntos: 0
Botones en movieclip resizable se mueven al hacer drag

Buenas a todos, soy novato en esto del AS3 y estoy desarrollando una aplicación para ser usada como autoejecutable (sin navegador). La aplicación tiene botones en un menú que llaman movieclips de la biblioteca (tipo ventanas de Windows) y las carga en un contenedor, éstos se pueden mover, minimizar, nuevamente abrir, cerrar y escalar presionando un botón ubicado en la esquina inferior derecha del movieclip. El código del resizer de la ventana (movieclip) está en la propia línea de tiempo del movieclip (que para el ejemplo voy a llamar Ventana).
El problema que tengo es que cuando los botones (minimizar, maximizar, cerrar y resizer) del movieclip “Ventana” son tipo clip de película al pulsarlos se mueven, por el drag, independientemente del resto del movieclip, si les coloco la propiedad como “botón” funcionan perfecto pero entonces me sale el siguiente error:

ReferenceError: Error #1069: No se encontró la propiedad startDrag en flash.display.SimpleButton y no hay ningún valor predeterminado.
at Ventana/Arrastrar()
ReferenceError: Error #1069: No se encontró la propiedad startDrag en flash.display.SimpleButton y no hay ningún valor predeterminado.
at PruebaAS3_fla::MainTimeline/Arrastrar()
ReferenceError: Error #1069: No se encontró la propiedad stopDrag en flash.display.SimpleButton y no hay ningún valor predeterminado.
at PruebaAS3_fla::MainTimeline/Soltar()


De hecho, cuando abro el swf o el .exe y pulso uno de estos botones me sale un cuadro de diálogo con el Error de actionsript que ya escribí, y claro, si pulso el botón de descartar todo funciona muy bien. ¿Cómo soluciono este error?

Este es el código en el movieclip:

stop();
import flash.display.DisplayObject;
import flash.events.MouseEvent;

//////////////

var clickX;
var clickY;

resizer.addEventListener(MouseEvent.MOUSE_DOWN , onResizerPress );

function onResizerPress(e:MouseEvent)
{
clickX = this.x + this.width - this.parent.mouseX;
clickY = this.y + this.height - this.parent.mouseY;
this.parent.setChildIndex( this , this.parent.numChildren-1);
addEventListener(Event.ENTER_FRAME , onResizerFrame );
resizer.addEventListener(MouseEvent.MOUSE_UP , onResizerRelease );
this.parent.stage.addEventListener(MouseEvent.MOUS E_UP , onResizerRelease );
}

function onResizerRelease(e:MouseEvent)
{
if (hasEventListener(Event.ENTER_FRAME))
{
removeEventListener(Event.ENTER_FRAME , onResizerFrame );
}
if (resizer.hasEventListener(MouseEvent.MOUSE_UP))
{
resizer.addEventListener(MouseEvent.MOUSE_UP ,onResizerRelease );
}
if (this.parent.stage.hasEventListener(MouseEvent.MOU SE_UP))
{
this.parent.stage.removeEventListener(MouseEvent.M OUSE_UP , onResizerRelease );
}
}
function onResizerFrame(e:Event)
{
var w = this.parent.mouseX - this.x + clickX;
var h = this.parent.mouseY - this.y + clickY;
width = w;
scaleY = scaleX;
}
//resizer.buttonMode = true;
///////

this.addEventListener(MouseEvent.MOUSE_DOWN, Arrastrar);
this.addEventListener(MouseEvent.MOUSE_UP, Soltar);

function Arrastrar(e:MouseEvent)
{
e.target.startDrag();
this.parent.setChildIndex(this, this.parent.numChildren-1);
}
function Soltar(e:MouseEvent)
{
stopDrag();
}

//////////////

minimizar_mc.addEventListener(MouseEvent.CLICK, ClickMinimizar);
function ClickMinimizar(event:MouseEvent):void
{
this.gotoAndStop(2);
}
minimizar_mc.buttonMode = true;


salir_mc.addEventListener(MouseEvent.CLICK, ClickSalir);
function ClickSalir(event:MouseEvent):void
{
MovieClip(parent).removeChild(this);
}
salir_mc.buttonMode = true;


El código en la línea principal que llama los movieclips es este:

Menu_mc.boton01_mc.addEventListener(MouseEvent.CLI CK, ClickVentana01);
function ClickVentana01(event:MouseEvent):void
{
var Ventana01_mc:Ventana = new Ventana();
Ventana01_mc.x = 170;
Ventana01_mc.y = 40;
contenedor01.addChild(Ventana01_mc);
}
Menu_mc.boton01_mc.addEventListener.buttonMode = true;


De ante mano gracias por toda su ayuda.

Última edición por Josalv; 23/06/2010 a las 15:12 Razón: Creo que este titulo explica mejor el problema