Comunidad de diseño web y desarrollo en internet online

Cómo hacer un drag a lo largo de una circunferencia

Citar            
MensajeEscrito el 22 Abr 2008 04:53 pm
Hmmm... creo que el tema explica bien la duda... estoy haciendo un sistema solar y quiero arrastrar los mundos a lo largo de su órbita...

Para ser sinceros no tengo la menor idea de cómo hacerlo :S

De antemano sé como NO hacerlo, sé que hay que descartar el startDrag pues sólo segmenta el movimiento a un rectángulo... aunque igual y si recalculas las restricciones a partir de unas variables que vayan calculando la circinferencia del círculo pues podría funcionar...

Bueno.. saludos

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2008 05:32 pm
Mira yo he estado intentando ayudarte pero no me sale bien el ejemplo

Por que le he metido estudio a las funciones matematicas del elipse y por errores de decimales del sistema matematico del flash no queda nada bien el resultado final
Ahora esto lo hago para que las forma de las orbitas las puedas colocar de forma eliptica o de forma circular
Si te fijas hay una recta que sigue al planeta, bueno esa recta tiene un angulo yo queria igualar la ecuacion de la recta con la ecuacion de la elipse para ver el punto de corte entre esas dos funciones... de hecho lo hice asi una ves pero me salio cualquier disparate.
Si logras tu hallar esa ecuacion em al das y progamos asi el programa se ajustaria automaticamente a cualquier forma de orbita sea circular o eliptica

Ahora si me dices que la orbita que usaras es cricular perfecta ese si es facil de hacer y queda bien

La funcion del DragAndDrop no te sirve apra esto... yo lo hice por codigo

Por Enav

180 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 01 May 2008 02:57 am
de hecho creo que hay una manear más fácil de solucionarlo jeje

Digo... hay que combinar todos los elementos posibles cierto?

Supongo que la línea que pusiste a calcular el ángulo es vía código.... qué tal si lo hacemos con un MovieClip y ya muahahahaha

Digamos que trazas la línea, pones un extremo en x=0; y en otro pones el MovieClip con el Planeta... de esta manera cuando muevas el mouse pues la posición se ajusta por el puro ángulo... sólo activas la función con el onPress y onRelease para que se ejecute mientras presionas y tan tan, tenemos nuestro drag de circunferencia... para hacerlo en relación con una elipse pues nada mas determinas que el MovieClip del planeta acerque su posición en x según como quieras la elipse, y creo que eso es más fácil que armar la fórmula.

:D

Mil Gracias Enav, te la rifaste muy chido

Saludos

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 May 2008 04:03 am
Pero vas a trabajar con orbitas eplipticas?

Por Enav

180 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 01 May 2008 05:11 am
Hmmm... si... aunque ya se me ocurrió otra manera de hacerlas jejeje (haces todo dentro de un MovieClip y luego lo haces elíptico con la herramienta de transformación libre, de esa forma el código no cambia) ;)

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 May 2008 05:32 am
Tambien serviria... el codigo para control con el dato del angulo seria algo asi

Código :

N = Math.round(Angulo*McAnimacionOrbital._totalframes/360);
McAnimacionOrbital.gotoAndStop(N);

Por Enav

180 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 01 May 2008 02:11 pm
Pues mira, ayer me puse a hacer esto, sólo haz un MovieClip que se llame objeto_mc y pones un MovieClip que se llame planeta_mc adentro y le metes este código:

Código :

objeto_mc.onPress = function(){
   _root.onEnterFrame = function() {
      updateAfterEvent();
      xdif = _root._xmouse-objeto_mc._x;
      ydif = _root._ymouse-objeto_mc._y;
      angulo = Math.atan2(ydif, xdif);
      angulo = angulo*180/Math.PI;
      if(Math.abs(angulo) > 90){
         dif = 180-Math.abs(angulo);
      }else{
         dif = Math.abs(angulo);
      }
      if(dif<90){
         objeto_mc.planeta_mc._x = dif;
      }
      objeto_mc._rotation = angulo;
   }
}
objeto_mc.onRelease = objeto_mc.onReleaseOutside = function(){
   delete _root.onEnterFrame;
}



Sin embargo no me sale una elipse sino más bien una figura tipo espirógrafo (no he entendido bien cómo calcular limitar el movimiento del movieClip para que no me haga el ese como rebote que tiene)

Intenté alterar gráficamente al MovieClip, pero no funcionó mi solución "simple". Tonx pues sigo en estas, aunque lo del arrastre alrededor de la circunferencia funciona perfectamente :D

Saludos

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 May 2008 10:02 pm
Pero tu dijiste algo direrente....... dijiste que ya no ivas a calcular si no mas bien ivas a hacer una animacion

Por Enav

180 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 02 May 2008 12:05 am
Bueno aqui esta un ejemplo final que ha quedado bastante prolijo hace el movimiento eliptico basado en una animacion cosa que fue idea tuya.... me hubiera gustado hacerlo por medio de ecuaciones matematicas, eso me abria hecho sentir poderosamente intelectual :cool: ... lo trate pero me fastidie :zzz: y lo hice asi que fue tu idea sencilla :wink: ....

Descargalo aqui: http://usuarios.lycos.es/navarrohidalgo/CL/ Selecciona: Planeta y orbita.rar

Espero te ayude y te sea util :)

Por Enav

180 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 May 2008 07:28 pm
Bastante :D Mil Gracias Enav, ya lo bajé y me gustó mucho, incluso el cómo solucionaste la elipse :D

Por Stockman

Claber

145 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Jul 2010 12:28 pm
Buenos días,

Sé que ya ha pasado tiempo desde que se dio esta respuesta, pero es que tengo el mismo problema. Quiero hacer lo mismo pero en as3. ¿Alguna sugerencia??? Gracias.

Por smarties

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 26 Jul 2010 12:54 pm
Bueno abrelo y deberia de convertirse el codigo a AS3 sin problema... depaso que gran parte del mecanismo es una animacion

Por Enav

180 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Jul 2010 11:23 am
Gracias por la respuesta, pero intenté descargar el archivo y no se descarga.

Conseguí hacer lo siguiente. El selector (llamado "animacion" en el código) se mueve por la circunferencia, aunque debe haber algún fallo porque el selector sólo se mueve de forma correcta si el ratón está a bastante distancia del él. No sé qué fallo habrá... Por otra parte, tengo una duda más: Cómo hago para que el selector deje de rotar??? Coloqué un evento MOUSE_UP, pero no sé qué escribir en el código para que cuando no presiones sobre el selector, éste no se mueva.

Alguna sugerencia??? Muchas gracias.

animacion.addEventListener(MouseEvent.MOUSE_DOWN, mousedown);
animacion.addEventListener(MouseEvent.MOUSE_UP, mouseup);

//Declaracion de variables
var xdif:Number= mouseX-276;
var ydif:Number= mouseY-304;
var angulo:Number= Math.atan2(ydif,xdif);

//Rotar el selector cuando presionas el mouse
function mousedown (e:MouseEvent):void {

animacion.addEventListener(Event.ENTER_FRAME, mover);
function mover (e:Event):void{
presionado = true;
//Calculamos la rotacion del movieclip animacion(selector)
animacion.rotation=angulo* 180/Math.PI;
}
}

//Detener el selector cuando sueltas el mouse
function mouseup(e:MouseEvent):void {
presionado = false;

}
}

Por smarties

5 de clabLevel



 

safari
Citar            
MensajeEscrito el 02 Ago 2010 06:58 am
Nadie me puede echar una mano???

Gracias.

Por smarties

5 de clabLevel



 

safari

 

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