Comunidad de diseño web y desarrollo en internet online

Alguien puede decirme como hacer este tipo de menu?

Citar            
MensajeEscrito el 18 Nov 2006 12:41 am
Hola quisiera saber como pueod hacer este tipo de "animacion" para hacer un menu www.publivoros.com.mx

muchas gracias

Por desdeaki

3 de clabLevel



Genero:Masculino  

Mercadólogo, Publicista.

msie
Citar            
MensajeEscrito el 18 Nov 2006 02:13 am
Bueno, si te referís al trabjo artístico no hay mucho que pueda hacer para ayudarte, pero si lo que te interesa son los objetos que giran, acá tenés un link útil:

http://www.washeebo.com/sargento/02_flsh/0214/0214.php#voto

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 22 Nov 2006 06:19 am
Hola

Justo estoy haciendo lo mismo para una galeria de productos... te dejo el codigo q estoy hanciendo.. no esta 100% terminado pero creo q te va a servir, aca tenes un ejemplo de lo como quedaria http://ar.geocities.com/alfathenus/menu_circular.swf


Solo se necesitan 3 leyers con codigos y nada mas. Las imagenes se cargan externamente

Un primer leyer con las variables de configuracion y con las variables q se van a usar

Código :

//cada cuanto tiempo se recalcula la posicion de las carteras
var tiempo:Number = 100;
//radio de la elipse 
var radioX:Number = 300;
var radioY:Number = 100;
//desplazamiento de (0,0) del incio del movieclip (seria el centro de la elipse)
var x:Number = 350;
var y:Number = 300;
//contador de los grados
var grados:Number = 0;
//desplazamiento entre cada recalculo de la posicion
var desp:Number = 5;
//cantidad total de carteras
var totalCarteras = 20;
//distancia entre las carteras
var distCarteras:Number = 360/totalCarteras;
//contador de carteras q ya se cargaron
var contCarteras:Number = 0;
//acumulador de distancia
var acumDis:Number = 0;
//minima escala del boton
var min:Number = 10;

//el movieclip q contiene el menu circular, fijate q lo ubico en el (0,0)
var mc:MovieClip = _root.createEmptyMovieClip("catalogo", 1);
mc._x = 0;
mc._y = 0;

var loader:MovieClipLoader = new MovieClipLoader();
var obj:Object = new Object;


Ahora otro leyer con las funciones q necesitamos

Código :

//Pasa un valor de grados a radianes
function PasarRadianes(grad:Number):Number
{
   return (grad*Math.PI)/180;
}

//me da la pocicion y de una cartera en el menu
function PosicionY(grad:Number, radio:Number, y:Number):Number
{
   return radio*Math.cos(PasarRadianes(grad))+y;
}

//me da la posicion x de una cartera en el menu
function PosicionX (grad:Number, radio:Number, x:Number):Number
{
   return radio*Math.sin(PasarRadianes(grad))+x;
}

//mueve el menu de forma ciruclar
function MoverMenu(mc:MovieClip):Void
{
   AsignarEventos(mc);
   mc.onEnterFrame = function()
   {
      desp = ObtenerVelocidad(this);
      for(a in this)
         if(this[a]._name != undefined)
            Reposicionar(mc[a], desp);
   }
}

//posiciona la cartera en su nueva hubicacion
function Reposicionar(mc:MovieClip, desp:Number):Void
{
   //asigno el nuevo angulo del movieclip
   mc.grad += desp 
   if (mc.grad > 360)
      mc.grad = desp;
   else if (mc.grad < 0)
      mc.grad = 360+desp;
   mc._x = PosicionX(mc.grad, radioX, x);
   mc._y = PosicionY(mc.grad, radioY, y);
   //calculo el tamaño del movieclip
   a = (mc.grad > 180)?180-(mc.grad-180):mc.grad;
   f = (a * 100) / 180;
   r = (f*(100-min))/100;
   mc._xscale = 100-r;
   mc._yscale = 100-r;
   //calculo la profundidad del movieclip
   depth = 200-((y+radioY)-mc._y);
   mc.swapDepths(depth);
}

//obtengo la velocidad de cambio del angulo de cada mc dependiendo de la posicion del mouse
function ObtenerVelocidad(mc:MovieClip):Number
{
   dx = mc._parent._xmouse - x;
   vporc = (dx*100)/radioX;
   if (vporc > 100)
      vporc = 100;
   else if (vporc < -100)
      vporc = 0;
   v = (vporc * 5)/100;
   
   return (v < 0)?Math.ceil(v):Math.floor(v);
}

//asigno los eventos a los mc
function AsignarEventos(){
   for(a in mc)
      if (mc[a] instanceof MovieClip)
      {
         mc[a].onPress = function(){
            AnularBotones(this._parent, this);
            delete mc.onEnterFrame;
            if (this.grad < 180)
               this.onEnterFrame = function()
               {
                  if ((this.grad-5) > 0)
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], -5);
                  else
                  {
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], -this.grad);
                     delete this.onEnterFrame;
                  }
               }
            else
               this.onEnterFrame = function()
               {
                  if ((this.grad+5) < 360)
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], 5);
                  else
                  {
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], 360-this.grad);
                     
                     delete this.onEnterFrame;
                  }
               }
         }
      }
}

//anulos los botones
function AnularBotones(mc:MovieClip, mc2:MovieClip):Void
{
   trace(mc)
   for(a in mc)
      if(mc[a] instanceof MovieClip)
         delete mc[a].onPress;
   mc2.onPress = function()
   {
      _root.MoverMenu(mc);
   }
}


Y por ultimo un 3er leyer con la logica de funcionamiento

Código :

obj.onLoadInit = function(target:MovieClip)
{
   _root.contCarteras++;
   target._x -= target._width/2;
   target._y -= target._height/2;
        //si se cargaron todas las imagenes, inicio el movimiento del menu
   if (_root.contCarteras == _root.totalCarteras)
      _root.MoverMenu(_root.mc);
      
}
loader.addListener(obj);
mc2 = mc.createEmptyMovieClip("cartera0", mc.getNextHighestDepth());
mc3 = mc2.createEmptyMovieClip("img", 1);
mc2.grad = 0;
mc2._x = PosicionX(mc2.grad, radioX, x);
mc2._y = PosicionY(mc2.grad, radioY, y);
loader.loadClip("imagenes/cargar7.jpg", mc3);
for(i = 1; i < totalCarteras; i++)
{
   mc2 = mc.createEmptyMovieClip("cartera"+i, mc.getNextHighestDepth());
   mc3 = mc2.createEmptyMovieClip("img", 1);
   mc2.grad = i*distCarteras;
   mc2._x = PosicionX(mc2.grad, radioX, x);
   mc2._y = PosicionY(mc2.grad, radioY, y);
        //aca podes cargar las imagenes de la manera q vos necesites
   loader.loadClip("imagenes/cargar"+random(7)+".jpg", mc3);
}


Bueno, como podras ver lo estoy haciendo para un catalogo de carteras je

Espero q te sirva....

saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 



Ultima edición por alfathenus el 24 Nov 2006 04:47 pm, editado 1 vez

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 23 Nov 2006 04:25 pm
Bueno , creo que es logico para todos pero en el ultimo frame poner un Stop :D

muy facil y sencillo :D

Por Suriv

131 de clabLevel



 



Ultima edición por Suriv el 26 Nov 2006 11:59 am, editado 1 vez

firefox
Citar            
MensajeEscrito el 24 Nov 2006 04:45 pm
Perdon...

Hay una cosa q no confundi, no es en 3 frames, sino q es en 3 leyers (reemplazar frame por leyer en el texto) en verdad.... sorry por la equivocacion.... me pasa por apurado :wink:

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 25 Nov 2006 06:51 am
Muchas gracias me han sido de muchisima ayuda

Por desdeaki

3 de clabLevel



Genero:Masculino  

Mercadólogo, Publicista.

msie
Citar            
MensajeEscrito el 26 Nov 2006 12:18 pm
Entiendo que:


function AnularBotones(mc:MovieClip, mc2:MovieClip):Void
{
trace(mc)
for(a in mc)
if(mc[a] instanceof MovieClip)
delete mc[a].onPress;
mc2.onPress = function()
{
_root.MoverMenu(mc);
}
}



Eliminas la accion de todos los botones y generalizas poniendo 1 accion para todos los MC.

¿Como puedo hacerlo para cada movie_clip?

Y también otra duda, cuando cargas las imagenes


loader.loadClip("imagenes/cargar7.jpg", mc3);
for(i = 1; i < totalCarteras; i++)
{
mc2 = mc.createEmptyMovieClip("cartera"+i, mc.getNextHighestDepth());
mc3 = mc2.createEmptyMovieClip("img", 1);
mc2.grad = i*distCarteras;
mc2._x = PosicionX(mc2.grad, radioX, x);
mc2._y = PosicionY(mc2.grad, radioY, y);
//aca podes cargar las imagenes de la manera q vos necesites
loader.loadClip("imagenes/cargar"+random(7)+".jpg", mc3);
}



Cargas aleatoriamente las imagenes, como se puede hacer para que cargue X imagenes y el que no sea aleatoriamente :D

Gracias. Pd: esta muy currado el menu.

Por Suriv

131 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Nov 2006 11:06 pm
Hola

Eliminas la accion de todos los botones y generalizas poniendo 1 accion para todos los MC.

¿Como puedo hacerlo para cada movie_clip?


No te entendi esa parte...


Cargas aleatoriamente las imagenes, como se puede hacer para que cargue X imagenes y el que no sea aleatoriamente


Una idea es tener todas las imagenes en un vector, algo asi

Código :

var imgs:Array = new Array("imag1.jpg", "imag2.jpg");


FIjate vos como completas el vector, si las sacas de una BD, de un txt, o de un xml...
Luego en donde dice

Código :

loader.loadClip("imagenes/cargar"+random(7)+".jpg", mc3); 

Lo reemplazas por
[cocde]loader.loadClip("imagenes/"+imgs[i], mc3); [/code]
Tene en cuenta q la cantidad de imagenes (posiciones en el vector) debe coincidor con el valro de la variabale totalCarteras, q indica la cantidad de botones q hay en el menu

:wink:

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 27 Nov 2006 12:39 am
Lo de las imagenes lo decia porque aplicabas

random


con lo que cada vez que se refrescaba cargaba aleatoriamente las imagenes, de 7 que tenias te cargaba 7 imagenes aleatorioas (la imagen1, la imagen 5, la imagen 4....).

Y porque mc3?¿?¿??


Lo que no entendias, era como poder dar acciones a cada movieclip, es decir, Se me carga la imagen 1 en el mc_1, la imagen 2 en el mc_2.

Pero yo ahora quiero que cuando el mc_2, lo presione, aparte de que vaya a una posicion determinada, ejecute una acción.

Para poder interactuarlo.

creia que en este codigo estaba la respuesta.

Código :

function AnularBotones(mc:MovieClip, mc2:MovieClip):Void
{
trace(mc)
for(a in mc)
if(mc[a] instanceof MovieClip)
delete mc[a].onPress;
mc2.onPress = function()
{
_root.MoverMenu(mc);
}
}

Por Suriv

131 de clabLevel



 



Ultima edición por Suriv el 30 Nov 2006 08:29 am, editado 1 vez

firefox
Citar            
MensajeEscrito el 29 Nov 2006 06:45 pm
Hola

Ya esta hecho eso en el codigo. Fijate q en el onLoadInit, verifica q termina de cargar todas las imagenes, llama a la funcion MoverMenu, ahi dentro llamas a otra funcion q es AsignarEventos(mc), ahi es en donde asignas los eventos a todas las imagenes q se cargan.


Uso un 3er mc (mc3, q creo dentro de mc2 -contenedor de la imagen-), porque sino habria problemas en los eventos. Cuando cargas algo externo dentro de un mc, este pierde todos sus eventos entonces habria problemas con el preload, principalmente si lo controlas a mano con getBytesLoaded(), y creo q tambien si se utiliza MovieClipLoader() (no recuerdo si lo hice porque tambien tiraba error, o porque primero lo hice de la otra forma y quedo).


saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 30 Nov 2006 09:42 am
Lo del mc3 , esta aclarado.

Lo del las acciones creia que en AnularBotones y ahora cuando lo has dicho me he fijado bien, veo:

Código :

function AsignarEventos(){
   for(a in mc)
      if (mc[a] instanceof MovieClip)
      {
         mc[a].onPress = function(){
            AnularBotones(this._parent, this);
            delete mc.onEnterFrame;
            if (this.grad < 180)
               this.onEnterFrame = function()
               {
                  if ((this.grad-5) > 0)
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], -5);
                  else
                  {
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], -this.grad);
                     delete this.onEnterFrame;
                  }
               }
            else
               this.onEnterFrame = function()
               {
                  if ((this.grad+5) < 360)
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], 5);
                  else
                  {
                     for(b in this._parent)
                        if(this._parent[b]._name != undefined)
                           Reposicionar(this._parent[b], 360-this.grad);
                     
                     delete this.onEnterFrame;
                  }
               }
         }
      }
}


Yo lo que decia, a parte de que este codigo esta bien (perfecto) y haces la accion que pretendes (mostrando una "galería" de imagenes rotando ...... es como le asigno a cada movieclip (la cual tiene una imagen) una accion diferente.

*******************************************************************
Por ejemplo, lo que pretendo hacer es que cuando este rotando el menu, pasarle el rollOver a cada movieCLip y me muestre un texto dinamico en el medio indicandome que significado tiene la imagen. y cuando presiono aparte de que que accion la accion de posicionarse me ejecuta una accion.

*******************************************************************

He intentado poner (y no me funciona, porque creo que no es asi), pero te lo pongo para que me lo puedas ver y me lo puedas aclarar.

Código :

function AsignarEventos(){
 mc1.onRollOver
{
  trace("Este es el movieclip1");
}

el resto del codigo que has puesto tu
.......................
.......................
.......................
}


Lamento ponerte pegas a este codigo que has echo que esta genial (para la funcion que has pretendido hacer) ..........................

Por Suriv

131 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Nov 2006 01:24 pm
Como andas loco

Si te fijas bien, vas a ver q dentro del movieclip "mc" estan todos los movieclip de los botones, por lo tanto para asignarle eventos particulares a cada uno tenes q hacer lo siguiente

Código :

function AsignarEventos(){
   mc.mc1.onPress=function(){
    *****
   }
}


Fijate en poner bien el nombre del movieclip del boton q hayas usado al crearlo. Ademas revisa q no tengas q modificar la fucion de anular botones...

saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 30 Nov 2006 03:20 pm
He intentado lo que me dices, pero no me va, creo que me equivoco en algo.


los nombres de los movieclips son los que tienes tu por defecto, siempre me gusta hacer las cosas como lo ha echo el autor (en este caso, tu), para despues hacerlo yo desde cero, para si entenderlo.

Si me pones un ejemplo "practico" de la functionAsignarEventos, te lo agradecería, pq la verdad que no lo consigo.

conque me pongas un trace en la accion me vale.

*** Solo me ha funcionado 2 moviclips de los tres *** el mc2 y el mc3 pongo lo que he puesto
Se que no es lugar para darle la accion pero algo es algo

Código :


function AnularBotones(mc:MovieClip, mc2:MovieClip):Void
{
   trace(mc);
   trace ("Pasando por Anular Botones");
 for(a in mc)
  {
      if(mc[a] instanceof MovieClip)
      { 
       
         delete mc[a].onPress;
      }
  }
  
   mc2.onRollOver = function()
   {
      disen = "Diseño";
   }
   mc2.onRollOut = function()
   {
      disen = "";
   }
   
   mc3.onRollOver = function()
   {
      disen = "Futbol";
   }
 mc3.onRollOut = function()
   {
      disen = "";
   }
      mc2.onPress = function()
   {
      _root.MoverMenu(mc);
    
     trace ("Activando rotación");
     disen = "";
   }
   
   
  
}


Cargo 3 imagenes.

El mc2 = coje el el cargar1.jpg y el cargar 2.jpg

mientras que el mc3 coje el cargar 3.jpg

Cuando inserto las acciones

el mc2 coje la accion que le corresponde (las imagenes que cojen esta accion es cargar1.jpg y cargar2.jpg)

el mc3 coje la accion que le corresponde (la imagen que coje esta accion es cargar3.jpg)

*********************

Pd: esta noche te subo el fla para que lo veas.

Por Suriv

131 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Dic 2006 09:59 pm
Hola

Estas poniendo en el lugar equivocado el codigo, ese mismo codigo q desis va en la funcion AsignarEventos, como en el codigo q puse en el post anterior :wink:

La funcion AnularBotones lo que hace es aliminar los eventos de los botones, por eso la llamamos cuando hacemos click en algun boton.

^^

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 07 Dic 2006 04:47 pm
Voy a probarlo. No te he pasado el link del fla para que lo vieras porque he tenido mas de una semana sin internet, por culpa de mi ISP :D

Lo anterior sabia que estaba mal puesto ya que me lo pusistes pero no me funcionaba por eso lo hice ahi.

**************************
Ya lo he probado y no me va

he puesto en el AsignarEventos

Código :

function AsignarEventos(){
   mc.mc1.onRollOver = function(){
      disen = "Futbol";
      trace("Pasando");
   }
 mc.mc1.onRollOut = function(){
      disen = "";
   }

}

Y no me funcionan, he probado, por probar

Código :

function AsignarEventos(){
   mc2.onRollOver = function(){
      disen = "Futbol";
      trace("Pasando");
   }
 mc2.onRollOut = function(){
      disen = "";
   }


Resulta que funciona en el mc2.

He puesto el mc pero como es el global me lo cojia pero yo es poner texto global al contenedor.

Si se que mc es el contenedor

Haber si te subo esta noche el link y lo veras... y si te funciona entonces sera el Flash o en la publicacion....

Por Suriv

131 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Dic 2006 05:21 pm
puedes ir a gotoandlearn.com ahi hay un video tutorial sobre menues giratorios

Por buzu

163 de clabLevel



 

Los Angeles, California

firefox
Citar            
MensajeEscrito el 11 Dic 2006 09:11 pm
Aqui tengo la carpeta zip de un ejemplo que estoy haciendo para que lo veas

Rota(Beta)

Bueno he podido subirlo a un server gratuito no se cuanto tiempo estara

Rotatorio
Fla

Por Suriv

131 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Ene 2007 10:40 am
Lo mirare Buzu

alfathenus, mirastes lo que te mande, es que me olvide de ello y de vez en cuand te enviaba mensajes, haber si habias solucionado el tema :D

Por Suriv

131 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Mar 2009 09:39 pm

buzu escribió:

puedes ir a gotoandlearn.com ahi hay un video tutorial sobre menues giratorios


que habrá sido de el final en este ejercicio tam bueno, le he seguido la pista a esta clase de menu giratorio pero no he podido finalizarlo equitosamente porque todos los click sobre las imagenes apuntan a _evel10.catalogo, como hiciera para cambiar esto

Por hammer13

1 de clabLevel



 

msie7

 

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