Comunidad de diseño web y desarrollo en internet online

AS3 diagramacion liquida funciona solo en el primer frame

Citar            
MensajeEscrito el 21 Jul 2010 04:00 am
Q tal, es mi primer post, soy disenador actualmente mudando del AS2 al AS3, normalmente uso el buscador y encuentro la solucion pero no doy con esta, resulta q estoy haciendo mi web en diagramacion liquida y pues con esfuerzo logre ubicar los elementos, todo bien hasta ahi, pero al ir a un frame diferente al 1 pierde la diagramacion, entiendo q en AS3 no se pueden duplicar las ordenes en frames, entonces como logro desde el script principal ordenar q funcione la diagramacion en las frames 1,2,3,4,5 .... ??

aqui les dejo mi web, si unden el boton q dice i veran q al ir al frame 2 pierde la diagramacion. Mil Gracias.

http://juan-amejia.com/juan.html

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Jul 2010 05:00 pm
estas utilizando clases ?
yo por ejemplo cuando hago sitios con resize, tengo una clase la cual llamo cuando entro a una seccion nueva y le paso, los objetos a hacer resize, sus posiciones como texto y el movieclip principal para usarlo de referencia.
yo lo que haria seria llamar a esa clase cada vez que te pases de frame cambiando los objetos que cambien y dejando los que sigan.
en si es lo bueno de as3 reutilizar los codigos.

Por 22

79 de clabLevel



 

Uruguay

safari
Citar            
MensajeEscrito el 21 Jul 2010 05:07 pm
tengo el codigo asi en el primer frame: digamos en el frame 2 quiero alinear otra imagen del fondo diferente, mas algunas del primer frame, como llamo estas clases estando ubicado en el frame 2, o 3?? gracias.


stop();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

stage.addEventListener(Event.RESIZE, stageResizeHandler);
stageResizeHandler();

function stageResizeHandler(evt:Event = null):void {
foto.x = (stage.stageWidth - foto.width) / 2;
//black.x = (stage.stageWidth - black.width) / 2;
info.x = (stage.stageWidth - info.width) / 2;
logom.x = (stage.stageWidth - logom.width) / 2;
botones.x = (stage.stageWidth - botones.width) / 2;
tornillo2.x = (stage.stageWidth - tornillo2.width) / 1;


tornillo2.x=(stage.stageWidth-40);
barrainf.y=(stage.stageHeight-23);
}

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Jul 2010 05:26 am
mira te paso como me manejo yo con el resize te va a servir mucho creo.
primero que nada las clases son archivos aparte .as que las importas como cuando haces import flash.etc

Código ActionScript :

package Resize{

   import flash.display.Stage;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.display.StageAlign;
   import flash.display.StageScaleMode;
   import flash.events.Event;
   import flash.events.EventDispatcher;


   public class cResize extends MovieClip {

      private var objetos:Array;
      private var lugares:Array;

      private var _Mc:MovieClip;
      private var _mcStage:Stage;

      //tamaños minimos de pantalla
      private var min_width:int=1015;
      private var min_height:int=600;
      
      private var _Ancho:Number = 0;
      private var _Alto:Number = 0;

      public function cResize(pMc:MovieClip,pOobjetos:Array,pLugares:Array) {
         // constructor

         objetos=pOobjetos;
         lugares=pLugares;

         this._Mc=pMc;
         _mcStage=pMc.stage;
         addStageListener();
      }

      public function mostrar(muestro:String) {
         trace(muestro);
      }

      //por si quiero cambiar los valores por defecto de minimo y ancho
      public function minStage(Width:int, Height:int) {
         min_width=Width;
         min_height=Height;
      }

      public function addStageListener() {
         _mcStage.scaleMode=StageScaleMode.NO_SCALE;
         _mcStage.align=StageAlign.TOP_LEFT;


         // -- Agrego el evento --------------------------------
         _mcStage.addEventListener(Event.RESIZE,resizeHandler);
         // -- disparo el evento ahora para que los elementos se
         // -- ajusten al inicio
         _mcStage.dispatchEvent(new Event(Event.RESIZE));
      }


      private function resizeHandler(event:Event):void {
         /*
         CREAMOS 4 IF CON LA FUNCIONALIDAD DE CUBRIR LOS 4 ESTADOS DE LA PANTALLA
         1ERO CUANDO ESTA SE MAS GRANDE DE NUESTROS PARAMETROS MINIMOS
         2DO CUANDO EL STAGE SEA MAS CHICO QUE LOS PAREAMTROS MINIMOS
         3ERO CUANDO SOLO SEA MAS CHICO QUE EL ANCHO DE NUESTROS PARAMETROS
         4TO CUANDO SEA MAS CHICO EN EL ALTO DE NUESTROS PAREAMTOS
         */
         if (_mcStage.stageWidth >= min_width && _mcStage.stageHeight >=min_height){            
            _Ancho = _mcStage.stageWidth;
            _Alto = _mcStage.stageHeight;
         }else if(_mcStage.stageWidth < min_width && _mcStage.stageHeight < min_height){         
            _Ancho = min_width;
            _Alto = min_height;
         }else if(_mcStage.stageWidth < min_width){
            _Ancho = min_width;
            _Alto = _mcStage.stageHeight;
         }else if (_mcStage.stageHeight < min_height){         
            _Ancho = _mcStage.stageWidth;
            _Alto = min_height;
         }
      
      //ahora recorremos todos los objetos para hacer su resize
         for (var e:int=0; e<lugares.length; e++) {
            switch (lugares[e]) {
               case "bg" :
                  objetos[e].x = (_Ancho - objetos[e].width)/2;
                  objetos[e].y = (_Alto - objetos[e].height)/2;
                  break;

               case "menu" :
                  objetos[e].y = (_Alto - objetos[e].height - 34);
                  break;

               case "bottomLeft" :
                  objetos[e].y=(_Alto - objetos[e].height);
                  break;

               case "bottomRight" :
                  objetos[e].x=(_Ancho - objetos[e].width);
                  objetos[e].y=(_Alto - objetos[e].height);
                  break;
            }//fin del switch

         }//fin for
      
      }
   }
}


Esto va dentro de una carpeta Resize y con el nombre Resize.as
luego lo llamas import Resize.*;
y lo utilizas.
var miResize:Resize = new Resize(MovieClipStage, ArrayDeObjetos, ArrayDePosiciones);

los array de objetos y de posiciones deben coincidir en sus indices por ejemplo si el primer objeto es el menu en posiciones deberia ser un texto "menuPosicion" o algo asi que si te fijas luego en la clase resize en el switch debera estar y adentro hacer el resize.

Por 22

79 de clabLevel



 

Uruguay

chrome
Citar            
MensajeEscrito el 22 Jul 2010 06:07 am
pues voy a probarlo y les contare como me va, muchas gracias por las prontas respuestas.

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Jul 2010 12:04 am
qtal, he provado pero aun me da dificultad llamar las clases, tenes depronto un ejemplo donde puedo por ej alinear al centro un mc q se llama foto ? gracias.

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Jul 2010 02:47 pm
todo depende del punto de ancla, lo que te pongo es para un punto de ancla a la izquierda superior del movieclip.

case "foto" :
objetos[e].x = (_Ancho - objetos[e].width)/2;
objetos[e].y = (_Alto - objetos[e].height)/2;
break;


primero que nada tenes que crear un case en el switch con el nombre que quieras luego llamar.
y para centrar algo lo unico que tienes que hacer es el ancho del stage == _Ancho + el ancho del objeto == objetos[e].width todo dividido 2 y lo mismo con el alto.

http://www.spedevigner.com/cake/Noticias/view/68

quizas ahi te sirva un poco mas porque dice como llamar a la clase e instanciarla con sus array etc.

Saludos y cualquier cosa mandame un mensaje por mi web o dejame un comentario en la misma noticia asi sabre que sos vos.
y asi te podre ayudar mejor.

Por 22

79 de clabLevel



 

Uruguay

safari
Citar            
MensajeEscrito el 28 Jul 2010 11:39 pm
Bueno, nose q estoy haciendo mal, ahi prove la clase copiandola al primer frame asi

case "foto" :
objetos[e].x = (_Ancho - objetos[e].width)/2;
objetos[e].y = (_Alto - objetos[e].height)/2;
break;

ya defini en el switch q qde igual, el archivo .as esta en la carpeta resize, tdoo pero al compilar se empieza a reproducir la pelicula como loca sin hacer el stop(); y obviamente no me centra aun ..

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 21 Ago 2010 05:46 am
Yo tuve el mismo problema pero me lo pude solucionar asi mira..

Primero que nada a la clase le cambie el nombre de la funcion cResize por Resize que era lo que me estaba dando un error. Incluso le agregue el case "fondo" solo para probar.. era el mismo que "bg" igualmente jaja.

Dejo aca el codigo en limpio.

Código ActionScript :

package Resize{
   import flash.display.Stage;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.display.StageAlign;
   import flash.display.StageScaleMode;
   import flash.events.Event;
   import flash.events.EventDispatcher;

   public class Resize extends MovieClip {
      private var objetos:Array;
      private var lugares:Array;
      private var _Mc:MovieClip;
      private var _mcStage:Stage;
      private var min_width:int=1015;
      private var min_height:int=600;
      private var _Ancho:Number = 0;
      private var _Alto:Number = 0;
      public function Resize(pMc:MovieClip,pOobjetos:Array,pLugares:Array) {
         objetos=pOobjetos;
         lugares=pLugares;
         this._Mc=pMc;
         _mcStage=pMc.stage;
         addStageListener();
      }
      public function mostrar(muestro:String) {
         trace(muestro);
      }
      public function minStage(Width:int, Height:int) {
         min_width=Width;
         min_height=Height;
      }
      public function addStageListener() {
         _mcStage.scaleMode=StageScaleMode.NO_SCALE;
         _mcStage.align=StageAlign.TOP_LEFT;
         _mcStage.addEventListener(Event.RESIZE,resizeHandler);
         _mcStage.dispatchEvent(new Event(Event.RESIZE));
      }
      private function resizeHandler(event:Event):void {
         if (_mcStage.stageWidth >= min_width && _mcStage.stageHeight >=min_height) {
            _Ancho = _mcStage.stageWidth;
            _Alto = _mcStage.stageHeight;
         } else if (_mcStage.stageWidth < min_width && _mcStage.stageHeight < min_height) {
            _Ancho = min_width;
            _Alto = min_height;
         } else if (_mcStage.stageWidth < min_width) {
            _Ancho = min_width;
            _Alto = _mcStage.stageHeight;
         } else if (_mcStage.stageHeight < min_height) {
            _Ancho = _mcStage.stageWidth;
            _Alto = min_height;
         }
         //ahora recorremos todos los objetos para hacer su resize 
         for (var e:int=0; e<lugares.length; e++) {
            switch (lugares[e]) {
               case "bg" :
                  objetos[e].x = (_Ancho - objetos[e].width)/2;
                  objetos[e].y = (_Alto - objetos[e].height)/2;
                  break;
               case "menu" :
                  objetos[e].y = (_Alto - objetos[e].height - 34);
                  break;
               case "bottomLeft" :
                  objetos[e].y=(_Alto - objetos[e].height);
                  break;
               case "bottomRight" :
                  objetos[e].x=(_Ancho - objetos[e].width);
                  objetos[e].y=(_Alto - objetos[e].height);
                  break;
               case "fondo" :
                  objetos[e].x=(_Ancho/2);
                  objetos[e].y=(_Alto/2);
                  break;
            }
         } 
      }
   }
}


Fuera de eso para poder ejecutarla, la clase va en la carpeta Resize junto a nuestro swf. Ponemos este codigo en el stage.

Código ActionScript :

import Resize.*;

var arr:Array=new Array(cont.obj1, cont.obj2, cont.obj3);
var pos:Array=new Array("bg", "bottomRight", "menu");

var  miResize:Resize = new Resize(cont, arr, pos);


Y en el stage vamos a tener que tener obviamente un movieclip que se llame "cont" con 3 objetos adentro.. "obj1", "obj2" y "obj3".

Es todo. Saludos!! Y Gracias 22 o como te llames :cool:

Por chaume_loco

25 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Ago 2010 05:48 am
Otra cosa!! Si su pelicula va a ser chica.. recuerden cambiar en las privare vars de la clase el minimo y maximo del stage que estan x alla arriba de la clase en rojo.. ahora si.. sssssssssaludos!

Por chaume_loco

25 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Ago 2010 08:50 pm
Gracias por las respuestas pero no he podido aun con las clases.as, segui los pasos indicados y me da error
aqui dejo los archivos de mi pagina, estan en cs5 para quien amablemente me pueda ayudar, ahi esta el archivo como deberia quedar, pero al pasar de frame , pierdo la diagramacion liquida, GRACIAS!!!!

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 28 Ago 2010 08:54 pm

Por juanchoalzatedj

4 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 29 Ago 2010 04:48 am
Postea el error para que se te pueda ayudar.. saludos!

Por chaume_loco

25 de clabLevel



 

chrome

 

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