Comunidad de diseño web y desarrollo en internet online

Traer Al frente un movieClip

Citar            
MensajeEscrito el 26 Ago 2010 03:38 pm
Hola Gente de Cristalab

Actualmente estoy trabajando en el desarrollo de una sala de chat, lo que estoy implementando es que cuando otro usuario me envie un mensaje privado, se me abra una ventana nueva de chat, el usuario puede abrir n cantidad de ventanas de chat, puede "semi-ocultarlas", cerrarlas y desplazarlas por toda la aplicación. El problema que tengo es que cuando abro diferentes ventanas de chat privado, la primera que se abrio queda en el fondo y no puedo pasarla al frente. las ventanas son movieclips ton textfield dentro de ellos. el codigo que estoy utilizando es el siguiente:

en el escenario:

Código ActionScript :

boton.addEventListener(MouseEvent.CLICK, mostrarChat,false,0,true);
var chat:ChatPrivado;

var i:int = 0;

function mostrarChat(evt:MouseEvent):void{
   chat = new ChatPrivado();
   chat.x = Math.random()*300;
   chat.y = Math.random()*300;
   addChild(chat);
   chat.addEventListener(MouseEvent.CLICK, onTraerAlFrente,false,0,true);
}

function onTraerAlFrente(event:MouseEvent):void{
   //Acá quiero utilizar el código para traer al frente la sala de chat
}


y este el código dentro de la ventana de chat:

Código ActionScript :

cerrarChat.addEventListener(MouseEvent.CLICK, onCerrarChat,false,0,true);
moverChat.addEventListener(MouseEvent.MOUSE_DOWN, onStartDragChat,false,0,true);
moverChat.addEventListener(MouseEvent.MOUSE_UP, onStopDragChat,false,0,true);
minimizarChat.addEventListener(MouseEvent.CLICK, onMinimizarChat,false,0,true);

function onCerrarChat(event:MouseEvent):void {
   visible=false;
}

function onStartDragChat(event:MouseEvent):void {
   startDrag();
}

function onStopDragChat(event:MouseEvent):void {
   stopDrag();
}

function onMinimizarChat(event:MouseEvent):void {
   if (chatText.visible) {
      chatText.visible=false;
   } else {
      chatText.visible=true;
   }
}


muchas gracias por su ayuda

Por fats2005

6 de clabLevel



 

Ingeniero en Multimedia

opera
Citar            
MensajeEscrito el 26 Ago 2010 04:19 pm
Prueba algo así:

Código ActionScript :

function onTraerAlFrente(event:MouseEvent):void{ 
   this.swapChildren(evt.target, this.getChildAt(this.numChildren-1))
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 05:59 pm
Hola Jorge, probé lo que me diste pero me sale el siguiente error;

Código :

1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:DisplayObject.


entonces intente lo siguiente.

Código ActionScript :

function onTraerAlFrente(event:MouseEvent):void {
   this.swapChildren(getChildByName(event.target.name), this.getChildAt(this.numChildren-1));
}


y creo que por este camino depronto hay una solución pero falta solucionar algo, dentro del movieclip chat que habia creado hay otros botones y movieclips, entonces cuando le doy click a la caja de chat me toma diferentes nombres en el 'event.target.name' y yo solo quiero que tome el nombre del movieclip del chat, para que funcione bien

Por fats2005

6 de clabLevel



 

Ingeniero en Multimedia

opera
Citar            
MensajeEscrito el 26 Ago 2010 06:26 pm
Lo primero es definir en que zona tiene que clickar para traerlo al frente, si es un elemento secundario puedes usar parent, y hacer un cast a MovieClip para evitar el error. Supongamos que tiene que clickar en la barra superior de la caja de chat, entonces hacemos:

Código ActionScript :

function onTraerAlFrente(event:MouseEvent):void { 
   this.swapChildren(getChildByName(MovieClip(event.target.parent)), this.getChildAt(this.numChildren-1)); 
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2010 09:36 pm
pues en realidad lo que busco es que simule ventanas de windows, osea que picando en cualquier parte de la ventana de chat se ponga en frente. ahora lo he solucionado asi, y me ha funcionado bastante bien..

Código ActionScript :

function onTraerAlFrente(event:MouseEvent):void {
   var nombreCaja:String = new String();
   if (event.target.parent.name=="container") {
      nombreCaja = event.target.name;
   } else if (event.target.parent.parent.name=="container") {
      nombreCaja = event.target.parent.name;
   } else if (event.target.parent.parent.parent.name=="container") {
      nombreCaja = event.target.parent.parent.name;
   } else if (event.target.parent.parent.parent.parent.name=="container") {
      nombreCaja = event.target.parent.parent.parent.name;
   } else if (event.target.parent.parent.parent.parent.parent.name=="container") {
      nombreCaja = event.target.parent.parent.parent.parent.name;
   }
    this.swapChildren(getChildByName(nombreCaja), this.getChildAt(this.numChildren-1));  
}


cualquier sugerencia para optimizar código me vendria bastante bien

Muchas gracias por tu ayuda Jorge

Por fats2005

6 de clabLevel



 

Ingeniero en Multimedia

opera
Citar            
MensajeEscrito el 29 Ago 2010 09:30 pm
Hola,
podrías usar currentTarget para que siempre se refiera a la ventana.
Además, en lugar del swapChildren puedes usar directamente addChild con un cast a DisplayObject, ya que cuando añades a la lista de visualización un objeto que ya está en ella, se pone al frente:

Código ActionScript :

function onTraerAlFrente(event:MouseEvent):void
{
   this.addChild(event.currentTarget as DisplayObject);
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 30 Ago 2010 02:40 pm
Muchas Gracias Isidoro, funcionó perfecto y con menos código :)

Por fats2005

6 de clabLevel



 

Ingeniero en Multimedia

opera
Citar            
MensajeEscrito el 25 Oct 2011 12:26 am
Espero me puedan ayudar, este problema me esta partiendo la cabeza y no encuentro solucion.

Mi problema es el siguiente, uso esa funcion que escribieron ahi. this.addchild(event.currenTarget as DisplayObject); la saque de la ayuda de flash, pero el tema es que despues el MC me queda en toda la linea de tiempo, y yo necesito que sea solo en ese frame.

Buscando lei que se mantiene cuando traes objetos al frente, a menos que uses un contenedor, pero el problema es que no se muy bien hacer las cosas dinamicamente y no tengo cancha en POO, programo en los frames con estructurada.

En fin, probe con removeChild y me tira error y varias cosas mas, ya no se que inventar!!, asi que cualquier ayuda sera bienvenida!. Desde ya gracias!!

Por plancha

33 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.