Comunidad de diseño web y desarrollo en internet online

Problemas con función

Citar            
MensajeEscrito el 22 Dic 2009 01:04 pm
Esta función que pongo a continuación hace que un movieclip que está dentro de otro movieclip(grupo.p1),se mueva con una fuerza gravitatoria en contacto con el ratón.El problema esta en que esta posición -522 de x y 213.6 de y,son posiciones del escenario y no las del movieclip grupo.¿Como podría especificar en la función estas posiciones que están dentro de grupo y no posiciones respecto al escenario?

He probado a colocar en la función p1.x e p1.y,y los movieclips se salen del escenario.Tambien probé a guardar las variables de "x" "e" y de cada respectivo movieclip,pero tampoco iba bien.
Estaría muy agradecido a quién me sugiriera alguna idea.
Aquí les dejo el código por si ven algo extraño.

Gracias

Código ActionScript :

stage.addEventListener(Event.ENTER_FRAME, function() 
  {
  poligonos(grupo.p1,-522,213.6);
  });

function poligonos(pol:MovieClip, homex:Number, homey:Number)
{ 
  var x0 = pol.x ;
  var y0 = pol.y ;
  var x1 = parent.mouseX ;
  var y1 = parent.mouseY;  
  var distancex = x1 - x0  ;
  var distancey = y1 - y0 ;
  var distance  = Math.sqrt(distancex * distancex + distancey * distancey);
  var powerx = pol.x - distancex / distance * magnet / distance;
  var powery = pol.y - distancey / distance * magnet / distance;
  forcex = (forcex + (homex - x0) / 2) / magic;
  forcey = (forcey + (homey - y0) / 2) / magic;
  pol.x = powerx + forcex;
  pol.y = powery + forcey;
 }

Por muse

50 de clabLevel



 

msie
Citar            
MensajeEscrito el 22 Dic 2009 04:36 pm
Busca un poco en la ayuda de adobe sobre localToGlobal y globalToLocal es para conversion de coordenadas de coordenadas del stage a coordenadas de un clip especifico y viceversa.

Saludos!!

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2009 01:08 pm
Muchas gracias Angel Roberto,me diste un poco de esperanza con estos dos nuevos metodos que no conocía.Aunque creo,que ese no es problema según las pruebas que hecho,tampoco he conseguido entenderlo del todo bien.

Cuando paso estas posiciones globales a locales,me ocurre el mismo problema de siempre,coge las coordenadas de grupo.p1.x
y grupo.p1.y,que es lo mismo que poner en la función poligonos(grupo.p1,grupo.p1.x,grupo.p1.y);Con esto,los moviclips se salen del escenario,es por como está planteada la función poligonos.Esta función la pase de as2 a as3 pero sin entederlo totalmente,un poco complicada para un novato en as.

Al final lo que se me ocurrió fue crear un movieclip nuevo que estuviera encima de grupo.p1,para darle a la función las posiciones de este movieclip.Y funciona genial el problema es el siguiente:El código que te puse arriba está abreviado,y en vez de haber un movieclip dentro de grupo (p1),hay 30,para luego poder hacer movimientos de ese grupo.Bien,pues esto de crear un movieclip nuevo funciona cuando no tengo un movieclip grupo,que agrupa a todos,sino cuando los 30 clips están en el escenario.El problema es que no puedo hacer movimiento sin el grupo,tendría que ir uno por uno y aun así no sabría como hacerlo.

Asi que me rindo,le he dedicado demasiado tiempo,para la próxima me vez intentaré hacer códigos que entienda perfectamente.

De nuevo Muchas gracias Angel Roberto

saludos

Por muse

50 de clabLevel



 

msie8
Citar            
MensajeEscrito el 23 Dic 2009 04:28 pm
No se si entendi bien el problema pero si quieres mover todo el "grupo" para que al mismo tiempo se muevan todos los MovieClips porq pasas como parametro solo "p1" pero pensando que lo que vas a mover es "p1" y no el grupo calculas la distancia de p1 al mouse si no me equivoco pero porq la calculas en base a "parent.mouseX" y "parent.mouseY" ese paren no es el padre de "p1" es el padre me imagino de la aplicacion o del contenedor donde se encuentre escrita esa funcion el parent de p1 es "p1.parent" pero ahun asi creo que deberias clacular esa distancia con "p1.mouseX....." ya que la "X" del mouse varia entre un contenedor y sus hijos.


Hijole espero no haberte enrollado pero aqui estamos para ayudar..y nunca desertes ;)

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2009 06:08 pm
Tal y como dice Angel, mouseX es una propiedad referida a un MocieClip (o a la película principal). Así que opino que el problema es usar parent.mouseX (en lugar de mouseX). De todos modos hay un problema, que a ver si consigo aclararlo:

Estás escribiendo en una FUNCIÓN. Así que "parent.mouseX" o "mouseX" se refiere a DÓNDE tienes escrita la función.
Por ejemplo, si la función la tienes escrita directamente en la película principal, NO EXISTE parent (por tanto tampoco existirá parent.mouseX). y mouseX será la posición del ratón considerando que el (0,0) es la esquina superior izquierda de tu película.
Si la función está escrita en un Símbolo, sí que existirá parent (y parent.mouseX) en este caso mouseX será la posición del ratón considerando que el (0,0) es la esquina superior izquierda de tu símbolo y parent.mouseX la esquina superior de tu película.

Vamos, estás comparando posiciones distintas (porque estás tomando "referencias distintas"). Un ejemplo para aclararlo
Si tengo un MC en el "stage" "mimc" y escribo en la película principal

Código ActionScript :

mimc.x=100 //lo mandará a 100 pixels a la derecha del borde izquierdo de la película

Si tengo un MC en el stage "contenedor" y un Mc "mimc2" DENTRO de "contenedor"

Código ActionScript :

contenedor.mimc2.x=100  //lo mandará 100 pixels a la derecha del borde izquierdo ¡¡DE CONTENEDOR!!

Igualmente que con "x" ocurre con "mouseX", es distinto

Código :

mimc.mouseX  que contenedor.mimc2.mouseX

so pena que "contenedor" esté situado en (0,0)

Pero SÍ tú quieres enviar a un MC a mouseX ó a contenedor.mouseX

Código :

//con esto mandas a la misma posición a "mimc" en el stage que a "mimc2" que está en "contenedor"
mimc.x=mouseX
contenedor.micm2.x=contenedor.mouseX

¿lo lié?

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2009 07:40 pm
INCREIBLE!Me has hecho el hombre más feliz del mundo.Por fin,era el parent,ni por asomo pensé que el problema iba a estar por ahí.Exacto,grupo.mouseX,ya que todos los clips,están dentro de ese contenedor,claro as no es adivino.Muchas gracias Angel Roberto me dan ganas de enviarte una bolsa de gominolas o algo así.

Muchas gracias también Eliseo2 por la gran explicación,la verdad es que Angel dió con la clave.La pila de horas que le he dedicado a esto,en fin,es lo que tiene aprender as solo en tu casita,y sin saber ningún otro lenguaje de programación.

Infinitas gracias a los dos!

Por muse

50 de clabLevel



 

msie8

 

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