Foros del Web » Creando para Internet » Flash y Actionscript »

Botones en movieclip resizable se mueven al hacer drag

Estas en el tema de Botones en movieclip resizable se mueven al hacer drag en el foro de Flash y Actionscript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/06/2010, 09:50
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 14 años, 4 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
  #2 (permalink)  
Antiguo 23/06/2010, 10:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 217
Antigüedad: 19 años, 5 meses
Puntos: 5
Respuesta: Error #1069 con botones dentro de movieclip

si te funciona bien como movieclip lo dejaria asi y pondria alguna condicion para que no se muevan, por ejemplo
function Arrastrar(e:MouseEvent)
{

if event.currentTarget.name == "VENTANA"
e.target.startDrag();
this.parent.setChildIndex(this, this.parent.numChildren-1);
}
  #3 (permalink)  
Antiguo 23/06/2010, 11:02
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Error #1069 con botones dentro de movieclip

Hola klyfa, gracias por contestar. Disculpa mi ignorancia, hice lo que sugeriste y el programa me pide que arregle la sintaxis agregando paréntesis después de if y antes del semicolon así:

function Arrastrar(e:MouseEvent)
{
if (event.currentTarget.name == "Ventana");
e.target.startDrag();
this.parent.setChildIndex(this, this.parent.numChildren-1);
}


Pero al probarlo me sale este error de compilación:

Símbolo 'Ventana', Capa 'Acciones', Fotograma 1, Línea 54 1120:Acceso a una propiedad event no definida.

¿Qué debo hacer?
  #4 (permalink)  
Antiguo 23/06/2010, 11:09
 
Fecha de Ingreso: mayo-2005
Mensajes: 217
Antigüedad: 19 años, 5 meses
Puntos: 5
Respuesta: Error #1069 con botones dentro de movieclip

en el if, donde dice event.currentTarget.name
enves de event ponele solo la e, que es el parametro que recibe tu funcion
arriba del if podrias hacerle un trace a ver que te devuelve ej:
trace(e.target.name)
trace(e.currentTarget.name)
IF..........
  #5 (permalink)  
Antiguo 23/06/2010, 11:12
 
Fecha de Ingreso: mayo-2005
Mensajes: 217
Antigüedad: 19 años, 5 meses
Puntos: 5
Respuesta: Error #1069 con botones dentro de movieclip

y si te funciona tambien tendras que hacer lo mismo en la funcion soltar, para que no te de el error ese
  #6 (permalink)  
Antiguo 23/06/2010, 11:24
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Error #1069 con botones dentro de movieclip

Bueno ya lo hice y me permitió compilar, sin embargo los movieclip que hacen de botones: resizer, minimizar y maximizar siguen moviéndose solos y algo más el resizer sólo permite escalar en zoom in y no en zoom out mientras que como "botón" sí permite escalar en cualquier sentido.

El trace me devolvió esto:

resizer
instance290
minimizar_mc
instance290
maximizar_mc
instance290
  #7 (permalink)  
Antiguo 23/06/2010, 16:59
 
Fecha de Ingreso: junio-2010
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Botones en movieclip resizable se mueven al hacer drag

Solucionado. En la función Arrastrar se cambia esta línea:
e.target.startDrag();

Por esta otra:

if (e.target == this) e.target.startDrag();

quedando la función completa así:


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

Etiquetas: resize, simplebutton, startdrag
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:22.