Comunidad de diseño web y desarrollo en internet online

prototipos a primer click?( brayanisimo;) )

Citar            
MensajeEscrito el 11 Abr 2007 12:23 pm
hola a tod@s.

en primer lugar quiero decir que este post es continuacion de otro que evoluciono y quiero colocarlo en uno nuevo como pregunta a parte.
en segundo lugar quiero agradecer a brayanisimo su inestimable ayuda en el otro post, que fue iluminadora en muchos aspectos.
ahora ya vamos al tomate:

tengo este codigo en la capa acciones:

Código :

Stage.scaleMode = "exactFit";
import mx.transitions.Tween;
import mx.transitions.easing.*;
cant_menus=2;

function colocar_fondo()
{
   var red_fond_tit:Tween = new Tween(fondo_titulo,"_width", Back.easeInOut, fondo_titulo._width, 45, 2, true);
   var red_titulo_width:Tween = new Tween(titulo,"_width", Back.easeInOut, titulo._width, 22, 2, true);
   var red_titulo_height:Tween = new Tween(titulo,"_height", Back.easeInOut, titulo._height, 200, 2, true);
   var mov_tituloX:Tween = new Tween(titulo, "_x", Back.easeInOut, titulo._x, 5, 2, true);
   var mov_tituloY:Tween = new Tween(titulo, "_y", Back.easeInOut, titulo._y, 180, 2, true);
   var mov_barraX:Tween = new Tween(barra, "_x", Back.easeOut, barra._x, 70, 2, true);
}
function colocar_seleccionado(num_menu)
{
   var moverX:Tween = new Tween(_root["menu"+num_menu], "_x", Back.easeInOut, _root["menu"+num_menu]._x, 5, 2, true);
   var moverY:Tween = new Tween(_root["menu"+num_menu], "_y", Back.easeInOut, _root["menu"+num_menu]._y, 165, 2, true);
   var rotar:Tween = new Tween(_root["menu"+num_menu], "_rotation", Elastic.easeInOut, 0, -90, 2, true);
}
function colocar_resto()
{
   aux=375;
   for (i=1;i<=cant_menus;i++)
   {
      if (i!=menusel)
      {
         var moverX:Tween = new Tween(_root["menu"+i], "_x", Back.easeInOut, _root["menu"+i]._x, 45, 2, true);
         var moverY:Tween = new Tween(_root["menu"+i], "_y", Back.easeInOut, _root["menu"+i]._y, aux, 2, true);
         var rotar:Tween = new Tween(_root["menu"+i], "_rotation", Elastic.easeInOut, 0, -90, 2, true);
         aux+=307;
      }
   }
}
MovieClip.prototype.clickear = function()  {
   this.onRelease=function()
   {
      colocar_fondo();
      colocar_seleccionado(menusel);
      colocar_resto();
   }
}
onEnterFrame=function()
{
   if (menusel!=0)
      _root["menu"+_root.menusel].clickear(_root.menusel);
}


explicarlo orden a orden va a ser un poco largo, asi que no me enrollare y hablare en terminos un tanto generales :)
al principio tengo el Stage scalemode que vale para que todos los elementos de la web esten visibles a pesar de su redimensionamiento, aunque ese modo cambia los tamaños, de momento no tengo nada decidido y es una prueba. despues añado las librerias que necesito para utilizar la funcion Tween, que es la que me vale para recolocar los MC al presionar elementos de menu.
las funciones siguientes se expresan por su propio nombre y en cuanto echeis un vistazo a la web ( que la referenciare mas abajo) sabreis a que me refiero con cada nombre.
despues en cada elemento de menu tengo sencillamente un on(Release){ menusel='x';} dependiendo del elemento de menu clickeado...
gracias a brayanisimo (me enseño de la existencia de los prototipos, la funcion Tween y a no poner algunas garruladas en mi AS), he logrado depurar mi codigo hasta convertirlo en algo, que para mis conocimientos de flash y AS, es muy elegante, modularizado y chachi en general. pero hay un problema:
al emplear los prototipos, no me carga las instrucciones que ese prototipo tiene asociadas hasta el segundo click...y eso me deja un poco de piedra...

por que al segundo click??????
como lo hago para que funcione a la primera????


la referencia de mi web de pruebas es:

http://maije2.iespana.es

por favor, no hagais caso de la publicidad...
:lol:
muchisimas gracias de antemano
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 12 Abr 2007 03:30 am
En primera, te dije del código maligno que es:

Código :

onEnterFrame=function()

NO LA USES EN ROOT, por que la animación no depende de on Enter frame, por algo esta Tween ¿O no?, Creo que es por eso por lo que no funciona tu código
B ) Creo que mejor te doy un código Copy - Paste

Código :

stop();
Stage.scaleMode = "exactFit";
import mx.transitions.Tween;
import mx.transitions.easing.*;
function acomodarArreglo(orden:Array):Void {
   distancia = Math.round(Stage.height/(orden.length));
   for (i=0; i<orden.length; i++) {
      var yyy:Number = (((i+1)*distancia)-(distancia/2));
      new Tween(_root["menu"+orden[i]], "_y", Regular.easeOut, _root["menu"+orden[i]]._y, yyy, 1, true);
      new Tween(_root["menu"+orden[i]], "_x", Regular.easeOut, _root["menu"+orden[i]]._x, 50, 1, true);
      new Tween(_root["menu"+orden[i]], "_rotation", Regular.easeOut, _root["menu"+orden[i]]._rotation, 70+random(40), 1, true);
   }
}
function crearBotonera(item):Void {
   for (i=1; i<=item; i++) {
      var arreglito:Array = new Array();
      for (j=0; j<item; j++) {
         arreglito[j] = (j<i) ? i-j :item-j+i;
      }
      
      _root["menu"+i].boton(arreglito);
   }
}
MovieClip.prototype.boton = function(orden:Array):Void  {
   this.onRollOver = function() {
      new Tween(this, "_xscale", Back.easeOut, this._xscale, 120, .8, true);
      new Tween(this, "_yscale", Back.easeOut, this._xscale, 120, .8, true);
   };
   this.onRollOut = this.onReleaseOutside=function () {
      new Tween(this, "_xscale", Back.easeOut, this._xscale, 100, .8, true);
      new Tween(this, "_yscale", Back.easeOut, this._xscale, 100, .8, true);
   };
   this.onRelease = function() {
      trace(orden);
      acomodarArreglo(orden);
   };
};
//Como pones tus instancias "menu1", "menu2", "menu3", menu ......"" y quiero pensar que vas a poner mas que esas dos
//te cree una funcion que te va a ahorrar mucho código, donde tu pones tus instancias donde se te pegue la gana
// y al primer click las acomoda automaticamente y tu no te preocupas por nada, les da un efecto de todo
crearBotonera(2);

Cual es la diferencia? que este codigo es expandible hasta el infinito, si tienes mas elementos en tu menú, solo es necesario especificar un arreglo mayo, ¿como? sencillo

Código :

crearBotonera(numeromaximodeelementos);

Recuerda que como tus elementos empiezan en 1, lo indexe a 1 y si pones menu0 NO SIRVE.

Bueno espero que estudies mucho de programación y que regreses ayudando y no preguntando, saludos bye

Por bryanisimo

664 de clabLevel



Genero:Masculino  

Geek

firefox
Citar            
MensajeEscrito el 12 Abr 2007 07:57 am
se que me vas a odiar :( , pero no entiendo una linea del codigo:

Código :

arreglito[j] = (j<i) ? i-j :item-j+i;


no se para que vale la ? ni los :
asi visto el codigo yo diria que hace lo siguiente, pero necesito estar seguro...
el array arreglito, en su componente j es igual a (si j es menor que i) el numero de elementos de menu - j+i . . .
pero como no estoy seguro de que ese sea su significado, porque yo siempre pongo la condicion previamente con un if dentro del for, pues prefiero preguntar :oops:

me da mucha verguenza, pero es cierto, no se lo que significa y sin eso me es imposible entender exactamente que valores tiene cada expresion en todo momento...te prometo que despues de eso (o si lo quiere contestar otr@) no te molestare mas

muchisimas gracias por el codigo que te has tomado la moestia de escribir y cuando me dijiste lo de onEnterFrame de root, pense que te referias a quitar el root y ya estaba, no a que no lo pusiera sin asociarlo a ningun elemento, sry :oops:
siento ser tan pesado, de verdad :crap:
gracias de antemano
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 12 Abr 2007 03:58 pm
No te sientas mal, pero debes experimentar por tu propia cuenta, no te quiero resolver la vida, ya tengo suficiente con la mia :P

ahora sobre lo de

Código :

arreglito[j] = (j<i) ? i-j :item-j+i;

Es el shortcut de un if y extendido es esto

Código :

if(j<i){
arreglito[j] = i-j 
}else{
arreglito[j] = item-j+i;
}

Así que si no te sale intenta e intenta, y si no te sale busca y busca y si no encuentras ya pregunta, el 99.99% de las veces alguien mas tuvo ese mismo problema

saludos ^^

Por bryanisimo

664 de clabLevel



Genero:Masculino  

Geek

firefox
Citar            
MensajeEscrito el 12 Abr 2007 08:40 pm
muchisimass gracias bryanisimo, espero no tener que molestarte mas.
en cuanto tenga parida a mi criatura te mandare un MP con la url para que le eches un vistazo y me cuentes que te parece.

has sido increiblemente amable
muchisimas gracias de nuevo
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox

 

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