Comunidad de diseño web y desarrollo en internet online

Efecto profundidad

Citar            
MensajeEscrito el 16 Sep 2008 03:27 pm
hola!
Estoy programando un entorno a niveles con efecto produndidad. Hay algunos q son botones q se animan sobre el espacio y luego vuelven a bajar. Resulta q al bajar, (se nota más clicando los botones de la izquierda) el array al completo se va escorando a la derecha, por lo q se me va marchando fuera de campo. he variado las funciones pero solo consigo q se escore al otro lado o no se mueva.

gracias!!

Código :

class Profundidad extends MovieClip
{
   
   var xProf:Number;
   var easy:Number;
   var objetos_arr:Array;
      
   public function Profundidad()
   {
      
      objetos_arr = [];
   }
      
   public function ini(_objetos_arr:Array, _xProf:Number, _yProf:Number, _easy:Number):Void
   {
      
      this.xProf = _xProf;             //profundida en X (menor valor mayor profundidad)
      this.easy = _easy;                //valor del efecto easy (menor valor mayor lentitud)
      this.objetos_arr = _objetos_arr;                //Array con los nombres de los MovieClips
      PosActuales();                   // Funcion interna q guarda las posiciones iniciales de los MC
      
      this.onEnterFrame = function()
         {
            for (var i:Number = 0; i<objetos_arr.length; i++)
            {
               var obj:Object = objetos_arr[i];    //MC a mover
               var mov:Number = i+1;             // valor de movimiento y profundidad
               
               //movimiento en X
               obj.xPos = (_xmouse-(Stage.width/2))*mov/5;       //destino del MC
               obj.xvel = easy/mov;                // velocidad del easy segun la profundidad
               obj.xdest = obj["xPosNivIni_"+i] - obj.xPos/xProf;    //destino del MC segun profundidad
               obj._x += (obj.xdest-obj._x)/obj.xvel;       //calculo de movimiento del MC con easy
                              
            }
         };

   }
   private function PosActuales():Void
   {
      //recorre todos los MC y guarda las posiciones iniciales de c/us
      for (var i:Number = 0; i<objetos_arr.length; i++)
         {
            objetos_arr[i]["xPosNivIni_"+i] = objetos_arr[i]._x;
            
         }
   }
   
   //Setters y Getters
      
   public function set _xProf(num:Number):Void
   {
      this.xProf = num;
   }
   public function get _xProf():Number
   {
      return this.xProf;
   }
   
   public function set _easy(num:Number):Void
   {
      this.easy = num;
   }
   public function get _easy():Number
   {
      return this.easy;
   }
   
}


codigo del primer frame:

Código :

stop();
var objetos_arr:Array = [];
objetos_arr.push(todo_mc.nivel1);
objetos_arr.push(todo_mc.nivel2);
objetos_arr.push(todo_mc.nivel3);
objetos_arr.push(todo_mc.nivel4);
objetos_arr.push(todo_mc.nivel5);
objetos_arr.push(todo_mc.nivel6);
objetos_arr.push(todo_mc.nivel7);
objetos_arr.push(todo_mc.nivel8);
objetos_arr.push(todo_mc.nivel9);
objetos_arr.push(todo_mc.nivel10);
objetos_arr.push(todo_mc.nivel11);
objetos_arr.push(todo_mc.nivel12);
objetos_arr.push(todo_mc.nivel13);
objetos_arr.push(todo_mc.nivel14);
objetos_arr.push(todo_mc.nivel15);

//static function ini(_objetos_arr:Array, _xProf:Number, _yProf:Number, _easy:Number)

todo_mc.ini(objetos_arr,20,100,500);

Por eldani

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Sep 2008 06:40 pm
Debes poner un link de tu página para visualizar cual es el problema, porque no se entiende muy bien solo con palabras.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 16 Sep 2008 09:08 pm

Código :

objetos_arr[i]["xPosNivIni_"+i] = objetos_arr[i]._x;


Este array doble no parace estar creado.

Y no entiendo que parámetro interpreta este valor: ["xPosNivIni_"+i] ( no es un índice válido)

Prueba poniendo bajo esa linea un trace para ver si se asigna:

Código :

trace(i+ "  "+ objetos_arr[i]["xPosNivIni_"+i]);

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 16 Sep 2008 09:18 pm
Teseo, parece ser que al array lo envía como parámetro de la función constructora y lo iguala al array global dentro de la clase.
Y parece ser un array con MovieClips al que le manda variables con nombres "xPosNivIni_"+i con las posiciones de estos movies. Lo que no entiendo muy bien para que.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 16 Sep 2008 10:06 pm
Exacto, eso parece, pero en sí, no esta definido en la clase y no es parámetro.
digo que no entiendo de donde viene, pues si cambia exteriormente....le varia el punto de retorno.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 17 Sep 2008 01:25 pm
hola,
si, el trace me saca valores para cada nivel a cada posicion del mouse.

aquí esta el swf


Por eldani

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Sep 2008 08:14 am
hola,

dándole vueltas al trace, aislo el nivel más a la izquierda, el cual si pasa de tal punto en x, hace restar a los demás niveles una cantidad. Lo ideal sería que se restara en proporción a la profundidad/nivel, pero bueno.

Código :

trace(objetos_arr[14]["xPosNivIni_"+14]);

if ((objetos_arr[14]["xPosNivIni_"+14])>-150) {
(objetos_arr[i]["xPosNivIni_"+i])=(objetos_arr[i]["xPosNivIni_"+i])-150;


aqui el efecto
[flash width=600 height=400][/flash]

Por eldani

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Sep 2008 12:02 pm
En realidad donde está tu duda y que deseas hacer?
Por tus respuestas no se bien que quieres lograr o si ya lo has logrado.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 19 Sep 2008 12:11 pm
antecedentes:
en el swf de arriba del todo si cliclas varias veces en la estrella más a la izq, todo el conjunto se desplaza a la derecha y se pierde.

Pretendo:
que no ocurra. No me explico porqué ocurre con la estrella de la izq y apenas con las de la derecha.

Hasta el momento (swf ultimo):
Consigo q al leer la posicion del nivel de la estrella de la izq, distinga si sobrepasa -100, y entonces todos los niveles se resten 100 en x. Funciona para q no se pierda el conjunto, pero lo ideal sería que se restara en proporcion al nivel.
(bueno lo ideal es q al clicar la estrella no se desplazara la posicion en x al bajar)

gracias

Por eldani

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Sep 2008 12:26 pm
Tines 15 niveles en total y los mueves a todos con EnterFrame?
Y postea el código de dónde creas la nueva instancia de la clase.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 19 Sep 2008 12:48 pm
hola a todos ustedes.... necesito su ayuda..... podrian mandarme el codigo y la explicacion para hacer este efecto de profundidad?? os agradeceria enormemente..... gracias. [email protected] .. :cool:

Por joelillo_0905

8 de clabLevel



 

Bucaramanga, Colombia

msie7
Citar            
MensajeEscrito el 19 Sep 2008 12:54 pm
en frame 1 .fla

Código :

var objetos_arr:Array = [];
objetos_arr.push(todo_mc.nivel1);
objetos_arr.push(todo_mc.nivel2);
objetos_arr.push(todo_mc.nivel3);
objetos_arr.push(todo_mc.nivel4);
objetos_arr.push(todo_mc.nivel5);
objetos_arr.push(todo_mc.nivel6);
objetos_arr.push(todo_mc.nivel7);
objetos_arr.push(todo_mc.nivel8);
objetos_arr.push(todo_mc.nivel9);
objetos_arr.push(todo_mc.nivel10);
objetos_arr.push(todo_mc.nivel11);
objetos_arr.push(todo_mc.nivel12);
objetos_arr.push(todo_mc.nivel13);
objetos_arr.push(todo_mc.nivel14);
objetos_arr.push(todo_mc.nivel15);

//static function ini(_objetos_arr:Array, _xProf:Number, _yProf:Number, _easy:Number)

todo_mc.ini(objetos_arr,20,100,500);


archivo Action Script es lo mismo q puse al inicio añadiendo el if()

Código :

class Profundidad extends MovieClip {
   //Propiedades
   //var yProf:Number;
   var xProf:Number;
   var easy:Number;
   var objetos_arr:Array;

   //Constructor
   public function Profundidad() {
      /
      objetos_arr = [];
   }
   //Metodos
   public function ini(_objetos_arr:Array, _xProf:Number, _yProf:Number, _easy:Number):Void {
      
      //this.yProf = _yProf;             //profundida en Y (menor valor mayor profundidad)
      this.xProf = _xProf;            //profundida en X (menor valor mayor profundidad)
      this.easy = _easy;               //valor del efecto easy (menor valor mayor lentitud)
      this.objetos_arr = _objetos_arr;          //Array con los nombres de los MovieClips
      PosActuales();                  // Funcion interna q guarda las posiciones iniciales de los MC

      this.onEnterFrame = function() {
         for (var i:Number = 0; i<objetos_arr.length; i++) {
            var obj:Object = objetos_arr[i];      //MC a mover
            var mov:Number = i+1;               // valor de movimiento y profundidad

            //movimiento en X
            obj.xPos = (_xmouse-(Stage.width/2))*mov/3;      //destino del MC
            obj.xvel = easy/mov;                  // velocidad del easy segun la profundidad
            obj.xdest = obj["xPosNivIni_"+i]-obj.xPos/xProf;      //destino del MC segun profundidad
            obj._x += (obj.xdest-obj._x)/obj.xvel;         //calculo de movimiento del MC con easy

            
            //trace(objetos_arr[14]["xPosNivIni_"+14]);

            if ((objetos_arr[14]["xPosNivIni_"+14])>-150) {
            (objetos_arr[i]["xPosNivIni_"+i])=(objetos_arr[i]["xPosNivIni_"+i])-150;
            
            } 
            
         }
      };



   }
   private function PosActuales():Void {
      //recorre todos los MC y guarda las posiciones iniciales de c/us
      for (var i:Number = 0; i<objetos_arr.length; i++) {
         objetos_arr[i]["xPosNivIni_"+i] = objetos_arr[i]._x;
         //objetos_arr[i]["yPosNivIni_"+i] = objetos_arr[i]._y;
      }
   }
   //Setters y Getters

   //cambiamos la profundidad en X
   public function set _xProf(num:Number):Void {
      this.xProf = num;
   }
   public function get _xProf():Number {
      return this.xProf;
   }
   

   //cambiamos el valor de velocidad del easy
   public function set _easy(num:Number):Void {
      this.easy = num;
   }
   public function get _easy():Number {
      return this.easy;
   }
}


te mando el archivo completo si lo prefieres

Por eldani

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Sep 2008 12:59 pm
pero.... y como dedo llamar el mc?? va instanciado... o vinculado... y como debo llamar el archivo Action Script??? gracias

Por joelillo_0905

8 de clabLevel



 

Bucaramanga, Colombia

msie7
Citar            
MensajeEscrito el 19 Sep 2008 02:38 pm
@joelillo_0905, todavía la clase no está terminada y está dando problemas, deberías esperar a que estuviera terminada y entonces se lo consultas a @eldani para que te envíe los archivos si el lo cree conveniente.

@eldani, estaba viendo la forma que utilizas y me parece muy complicada, no es necesario que guardes las variables dentro que cada uno de los movieClips, puedes gurdar las variables en arreglos globales o variables locales de las funciones, he resumido la clase a esta que ves, pruébala y me dices si te resulta. (No he puesto los setters y getters porque no se que es lo que hacen)

Código ActionScript :

class Profundidad extends MovieClip {
   //Propiedades

   var _xProf:Number;
   var _easing:Number;
   var _movies:Array;
   var _positions:Array;

   //Constructor
   public function Profundidad() {

      _movies = new Array();

   }
   //Metodos
   public function ini(movies:Array, xProf:Number, easing:Number):Void {

      //---Variables globales de la función
      _xProf = xProf;
      _easing = easing;
      _movies = movies;

      //---Guardar las posiciones actuales
      posActuales();

      this.onEnterFrame = function():Void  {

         for (var i:Number = 0; i < _movies.length; i++) {
            
            var movie:MovieClip = _movies[i];            
            var valor:Number = (i + 1) * 5;
            
            //movimiento en X
            var xPos:Number = (_xmouse - (Stage.width / 2)) * valor / 3;
            var xvel:Number = easing / valor;            
            var xdest:Number = _positions[i].posX - xPos / valor;
            
            movie._x += (xdest - movie._x) / xvel;

         }
      };



   }
   //---Función de guardar las posiciones iniciales
   private function posActuales():Void {

      _positions = new Array();

      for (var i:Number = 0; i < _movies.length; i++) {

         _positions.push({posX:_movies[i]._x, posY:_movies[i]._y});

      }
   }
   
   //---Funciones setters y getters
   
}


En el primer frame

Código ActionScript :

var movies:Array = new Array();
var total:Number = 15;

for(var i:Number = 1; i <= total; i++){
   
   movies.push(todo_mc["nivel" + i]);
   
}

todo_mc.ini(movies,20,100,500);


Ahora, este es solo el movimiento en las "_x", me parece que el problema no está en esta clase, sino en el movimiento de cada estrella hacia arriba, postea el código respectivo a esta parte.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 19 Sep 2008 02:43 pm
ok.... lo probaré pero... no sè que nombre ponerle al archivo .as... para que tenga una relacion con el .fla ... solo falta eso... gracias...

Por joelillo_0905

8 de clabLevel



 

Bucaramanga, Colombia

msie7
Citar            
MensajeEscrito el 19 Sep 2008 03:04 pm
Debes ponerle el mismo nombre que la clase.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 19 Sep 2008 03:10 pm
gracias....

Por joelillo_0905

8 de clabLevel



 

Bucaramanga, Colombia

msie7
Citar            
MensajeEscrito el 22 Sep 2008 08:30 am
elchininet, gracias por tu post. Funciona correcto, pero el efecto propio de profundidad no es muy suave, parece q todos los niveles se desplazan paralelos.

la animacion de la estrella, es un clip no lleva más código q play, stop and gotoAnd.

puedo enviar si prefieres.

gracias

Por eldani

4 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Sep 2008 11:00 am
Lo del movimiento debe ser la variable que la multipliqué por 5:

Código ActionScript :

var valor:Number = (i + 1) * 5; 


Que en tu caso era:

Código ActionScript :

var mov:Number = i+1; 


solo elimina el 5.

Ahora referente al problema cuando la estrella regresa hacia el agua, debes darle las posiciones que tenía al principio cada uno de los elementos, las posiciones recuerda que se guardaron en el arreglo "_positions".

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 22 Sep 2008 11:20 am
vaya es cierto, ahora si! gracias!

con esto lo de la estrella no da problema.

Por eldani

4 de clabLevel



 

firefox

 

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