Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/04/2011, 12:09
Avatar de Hugo_Euan
Hugo_Euan
 
Fecha de Ingreso: abril-2011
Ubicación: Mérida, Yucatán, México
Mensajes: 193
Antigüedad: 13 años
Puntos: 71
Respuesta: Como hacer que un objeto rebote y vuelva a su posición

Hey que tal jppicun, que pasa con tu código ?
a simple vista lo que veo es que el efecto que buscas no se cumplirá tal cuál lo describes, eso es debido a <= 500 y >= 500 lo que me imagino que hace es un rebote demasiado corto, eso es por los limites que le diste, ademas que también las condiciones se cumplen antes de que termine la otra condición, no sé si me explique bien, por ejemplo
tu objeto lo mueves 5px y se mayor a 500 automáticamente se cumple la otra condición y disminuye 5px es por eso que no avanza mucho.

en fin, para empezar vamos a modificar un poco tu código, y en vez de que la acción la pongas en el movieclip, ponla en el fotograma 1.

para que pueda desplazarse tu objeto:
Código ActionScript:
Ver original
  1. var LimitX1:Number = 0; //Límite Izquierdo
  2. var LimitX2:Number = 400; //Límite Derecho
  3. var Control:Boolean = true; //Control para las condiciones
  4. var Adv:Number = 5; //Cantidad de avance (cuadros)
  5. var MyObject:Object = _root.flecha_mc; //el objeto con el que trabajarás
  6.  
  7. onEnterFrame = function(){
  8.     if((MyObject._x < LimitX2) && !(MyObject._x < (LimitX1-Adv)) && Control){
  9.         MyObject._x += Adv;
  10.     }else{
  11.         Control = false;
  12.         MyObject._x -= Adv;
  13.         if(MyObject._x < LimitX1){
  14.             Control = true;
  15.         }
  16.     }
  17. }

Veamos....
cuando inicia la sentencia EnterFrame valida:
1.- que tu objeto posicion x sea nenor a LimitX2 osea 0;
2.- valida que tu objeto posicion x no sea menor a LimitX2 osea 400;
3.- tambien valida que Control sea verdadero

si las 3 validaciones retornan verdadero

hacemos que tu objeto avance Adv osea 5 cuadros.

vamos al else
En donde asignamos que Control sea Falso
y movemos tu objeto de regreso
también validamos que tu objeto en posicion x sea menor a LimitX1 si es menor asignamos a Control true para que se repita el proceso desde el principio.

Tal vez no te quede muy claro la razon de Control.
Bueno lo que hace practicamente es un inter entre el If y el else...
es palabras mas sencillas, cuando Control es falso no permite al ejecutar los procesos dentro del if hasta que el objeto este en la posicion LimitX1.
y cuando Control es verdadero no permite ejecutar los procesos dentro del else.
así de sencillo, ahora, bien, con respecto a lo de tu rotación pues
puedes hacer lo siguiente:
Código ActionScript:
Ver original
  1. var LimitX1:Number = 0; //Límite Izquierdo
  2. var LimitX2:Number = 400; //Límite Derecho
  3. var Control:Boolean = true; //Control para las condiciones
  4. var Adv:Number = 5; //Cantidad de avance (cuadros)
  5. var RotationSpeed:Number = 5; //Velocidad de rotación
  6. var MyObject:Object = _root.flecha_mc; //el objeto con el que trabajarás
  7.  
  8. onEnterFrame = function(){
  9.     if((MyObject._x < LimitX2) && !(MyObject._x < (LimitX1-Adv)) && Control){
  10.         MyObject._x += Adv;
  11.     }else{
  12.         Control = false;
  13.         MyObject._x -= Adv;
  14.         MyObject._rotation+=RotationSpeed;
  15.         if(MyObject._x < LimitX1){
  16.             Control = true;
  17.         }
  18.     }
  19. }

solo incluimos:

var RotationSpeed:Number = 5; //Velocidad de rotación
MyObject._rotation+=RotationSpeed;


si pruebas esta función te darás cuenta que cuando tu objeto va de regreso a LimitX1 lo hace rotando y se detiene hasta llegar. si quisieras que tu objeto no tenga el efecto de rotacion y solo que simplemente se vea que roto, cambias:

MyObject._rotation+=RotationSpeed; por MyObject._rotation=RotationSpeed; solo le quitamos el signo de mas, pero eso hara que no se vea el efecto.

Muy bieeeenn, vamos bien.. jejej =D
aquí te posteo la ultima de mis opciones, si estas buscando que cuando tu objeto llegue a LimitX2 y regrese rotando pero no consecutivamente, osea que llegue a LimitX2 y rote 180 grados y se detenga antes de llegar a LimitX1

esta es la alternativa
Código ActionScript:
Ver original
  1. var LimitX1:Number = 0; //Límite Izquierdo
  2. var LimitX2:Number = 400; //Límite Derecho
  3. var Control:Boolean = true; //Control para las condiciones
  4. var Adv:Number = 5; //Cantidad de avance (cuadros)
  5. var RotationSpeed:Number = 5; //Velocidad de rotación
  6. var RotationAngle:Number = 180; //Ángulo de rotación
  7. var MyObject:Object = _root.flecha_mc; //el objeto con el que trabajarás
  8.  
  9. onEnterFrame = function(){
  10.     if((MyObject._x < LimitX2) && !(MyObject._x < (LimitX1-Adv)) && Control){
  11.         MyObject._x += Adv;
  12.         if(MyObject._rotation == RotationAngle){
  13.             MyObject._rotation = 0;
  14.         }
  15.     }else{
  16.         Control = false;
  17.         MyObject._x -= Adv;
  18.         if(MyObject._rotation < RotationAngle){
  19.             MyObject._rotation+=RotationSpeed;
  20.         }
  21.         if(MyObject._x < LimitX1){
  22.             Control = true;
  23.         }
  24.     }
  25. }

agregamos una variable mas
var RotationAngle:Number = 180;

y en el if

if(MyObject._rotation == RotationAngle){
MyObject._rotation = 0;
}


esto es para que el siclo de rotación del objeto se vuelva a repetir, en el else se agregó

if(MyObject._rotation < RotationAngle){
MyObject._rotation+=RotationSpeed;
}


esto para que mientras el ángulo del objeto sea menor a RotationAngle osea 180
el objeto rotara con una velocidad de 5 cuadros "RotationSpeed"

Así de sencillo verdad? =D

espero que te sirva y cualquier cosa posteas

SALUDOS Y EXITOO !!!!