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

[SOLUCIONADO] swapDepths me duplica el clip de pelicula

Estas en el tema de swapDepths me duplica el clip de pelicula en el foro de Flash y Actionscript en Foros del Web. Hola todos Estoy trabajando en AS2 Estoy realizando un jgo de arrastrar y soltar, tengo 5 mc: pieza1_mc, pieza2_mc, pieza3_mc, pieza4_mc, pieza5_mc. Son los objetos ...
  #1 (permalink)  
Antiguo 12/07/2014, 00:21
Avatar de yefranjo77  
Fecha de Ingreso: febrero-2008
Ubicación: Aragua - Venezuela
Mensajes: 312
Antigüedad: 16 años, 2 meses
Puntos: 1
De acuerdo swapDepths me duplica el clip de pelicula

Hola todos

Estoy trabajando en AS2

Estoy realizando un jgo de arrastrar y soltar, tengo 5 mc:

pieza1_mc, pieza2_mc, pieza3_mc, pieza4_mc, pieza5_mc. Son los objetos a arrastrar.

dropZone1, dropZone2, dropZone3, dropZone4, dropZone5. Son los mc donde deben calzar todas las piezas_mc arriba mencionadas.

al arrastrar cualquiera de las piezasX_mc debería pasar por encima de las otras piezasX_mc pero no lo hace.

luego le coloco la siguiente comando:

Código:
this.swapDepths(this.getNextHighestDepth());
pasa lo siguiente, por ejemplo: arrastro pieza1_mc y pasa por encima de las otras piezaX_mc y lo suelto en dropZone1 correctamente inicia el gotoAndPlay(2); indicando por un enunciado en texto (MUY BIEN) que esta correcto el ejercicio, cuando llega al fotograma 30 hay una accion:

Código:
gotoAndStop("inicio");
me devuelve al fotograma 1 (inicio)

en lo que me devuelve a ese fotograma pieza1_mc se duplica pero en su posición original, es decir, me queda pieza1_mc en dropZone1 y pieza1_mc en posicion original, cosa que no debería pasar.

aquí les dejo la fuente del ejercicio para que lo vean y me ayuden con ese detalle

http://www.mediafire.com/download/9d.../lengua000.fla

Código:
posX = pieza1_mc._x;
posY = pieza1_mc._y;
pieza1_mc.onPress = function (mouseDown){
	
    this.startDrag();
    this.swapDepths(this.getNextHighestDepth());
}
pieza1_mc.onRelease = function (mouseUp)
{
    this.stopDrag();
    if (this.hitTest(dropZone1))
    {
        cont+=1;
        gotoAndPlay(2);
	sonido = new Sound();
        sonido.attachSound("muy_bien");
        sonido.start();// reproducir sonido
        pieza1_mc._x = dropZone1._x;
        pieza1_mc._y = dropZone1._y;
	}
    else
    {
        desc+=1;
        gotoAndPlay(31);
	trace("regresando a "+posX+"/"+posY);
	sonido = new Sound();
        sonido.attachSound("vamos_amiguito");
        sonido.start();// reproducir sonido
        pieza1_mc._x = posX;
        pieza1_mc._y = posY;
    } // end else if
};
De antemno gracias por sus aportes
__________________
"Un punto importante para lograr nuestras metas es tener paciencia"
  #2 (permalink)  
Antiguo 13/07/2014, 10:47
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: swapDepths me duplica el clip de pelicula

Los movieclip los pones con attach o en el editor?

Si en "inicio" aparecen los mc, puestos con el editor, eso explica en cierta forma que reaparezcan, si entendí bien.
La solución podría ser que hagas un frame al que normalmente no se regrese. Ahí pones los mc por primera vez y los mantienes. Crea un layer si es necesario.
Otra solución, si no lo has hecho, es usar attach.

¿Qué versión de Flash es?

Cuando el mc se duplica ¿alguno desaparece?

Esto:
this.swapDepths(this.getNextHighestDepth());
¿te funciona bien?
¿qué hace exactamente?

"A esto, intercambiar profundidad, con la siguiente profundidad más alta".
Dicho así parece lo mismo que:
this._depth++
xD

Si no te funciona eso quizá te convenga crear una variable que marque cual es el depth que quieres poner y qué mc lo tiene. La verdad no manejo mucho cambios de depth, creo que en mi versión de flash no existe swapdepth.
  #3 (permalink)  
Antiguo 13/07/2014, 21:39
Avatar de yefranjo77  
Fecha de Ingreso: febrero-2008
Ubicación: Aragua - Venezuela
Mensajes: 312
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: swapDepths me duplica el clip de pelicula

Hola Tachikomaia

Los movieclips estan en un layer y no he usado el attach.

La versión de Flash que uso es CS6 con AS2 ya que no domino AS3.

Los otros MC se mantienen en su sitio original.

Es la primera vez que uso: this.swapDepths(this.getNextHighestDepth());

swapDepths: Intercambia el apilamiento o nivel de profundidad, de este clip de película con el clip de película especificado.

Código:
myMC1_mc.onRelease = function() {
    this.swapDepths(myMC2_mc);
};
myMC2_mc.onRelease = function() {
    this.swapDepths(myMC1_mc);
};
En este ejemplo se aplica perfectamente la profundidad de un MC sobre el otro cuando son solo 2 MC.

el problema es cuando son varios MC.

getNextHighestDepth Este no lo tengo muy claro pero permite determinar un valor de profundidad...

this._depth++ No me funcionó...

No he usado attach pero voy a probarlo.

si puedes ver el link te lo agradecería y tal vez entiendas mejor el problema en caso de que tengas una duda...

Gracias por tu aporte
__________________
"Un punto importante para lograr nuestras metas es tener paciencia"
  #4 (permalink)  
Antiguo 13/07/2014, 22:39
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: swapDepths me duplica el clip de pelicula

He usado swapdepth un par de veces, pero en versiones de Flash que no uso; uso una muy vieja que no lo tiene, y en parte por eso no veré tu link -para verlo tendría que descargar e instalar un Flash más reciente, la verdad es que no tengo ganas de eso, y mi compu no está para bollos-.

Tal vez no te funciona this.swapDepths(this.getNextHighestDepth()) porque lo que estás poniendo en el paréntesis es un número -al final-, cuando en realidad -tal vez- se requiera un nombre.

Fijate.

En:
this.swapDepths(myMC1_mc);
...lo que hay dentro del paréntesis en un nombre. No recuerdo el nombre técnico, pero si vas al diccionario de Actionscipt o lo que tenga tu programa, te va a decir si el ¿parámetro? que debes insertar en el paréntesis es un "id", o sea nombre de una película, o si también puede ser un número.

En cambio, en:
this.swapDepths(this.getNextHighestDepth())
...dentro del paréntesis estás poniendo una función de flash, que devuelve un número ¿no?

Si el valor que te devuelve es el nombre del movieclip, bueno, habrá que ver por qué no funciona. Pero sino, si te devuelve un número, entonces creo que deberás que buscar una función que a partir del número te diga qué mc es, o tendrás que hacer esa función tu mismo.

this._depth++ fue un chiste xD

Según esto:
http://help.adobe.com/es_ES/AS2LCR/F...=00001308.html
...lo que te devuelve es un número.

No sé si te va a funcionar pero para comprobar que te da un número puedes crear una variable y escribirle eso: getNextHighestDepth()
Luego en el menú del proyector pones mostrar variables y ahí ves si es número o qué.
  #5 (permalink)  
Antiguo 13/07/2014, 22:46
Tachikomaia
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: swapDepths me duplica el clip de pelicula

Nope, según esto:
http://help.adobe.com/es_ES/AS2LCR/F...=00001363.html
Vas bien.

Yo me fijaría qué valor te da getNextHighestDepth().
  #6 (permalink)  
Antiguo 15/07/2014, 22:32
Avatar de yefranjo77  
Fecha de Ingreso: febrero-2008
Ubicación: Aragua - Venezuela
Mensajes: 312
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: swapDepths me duplica el clip de pelicula

Hola

Bueno después de tanto averiguar y buscar por todos lados conseguí la siguiente clase:

Código:
mx.behaviors.DepthControl.bringToFront(el_mc);
y la coloque aqui:

Código:
posX = pieza1_mc._x;
posY = pieza1_mc._y;


pieza1_mc.onPress = function(mouseDown){
	
	this.startDrag();
	mx.behaviors.DepthControl.bringToFront(pieza1_mc); //aquí
}
 	
pieza1_mc.onRelease = function (mouseUp)
{
    this.stopDrag();
	if (this.hitTest(dropZone1))
    {
        cont+=1;
        gotoAndPlay(2);
		sonido = new Sound();
        sonido.attachSound("muy_bien");
        sonido.start();// reproducir sonido
        pieza1_mc._x = dropZone1._x;
        pieza1_mc._y = dropZone1._y;
		
	}
    else
    {
        desc+=1;
        gotoAndPlay(31);
		trace("regresando a "+posX+"/"+posY);
		sonido = new Sound();
        sonido.attachSound("vamos_amiguito");
        sonido.start();// reproducir sonido
        pieza1_mc._x = posX;
        pieza1_mc._y = posY;
    } // end else if
};
y me funciono a la perfección ya que tambien controla los niveles.

Gracias. Espero les sirva de ayuda a todos.
__________________
"Un punto importante para lograr nuestras metas es tener paciencia"

Etiquetas: as, pelicula, sonido
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 17:58.