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 originalvar LimitX1:Number = 0; //Límite Izquierdo
var LimitX2:Number = 400; //Límite Derecho
var Control:Boolean = true; //Control para las condiciones
var Adv:Number = 5; //Cantidad de avance (cuadros)
var MyObject:Object = _root.flecha_mc; //el objeto con el que trabajarás
onEnterFrame = function(){
if((MyObject._x < LimitX2) && !(MyObject._x < (LimitX1-Adv)) && Control){
MyObject._x += Adv;
}else{
Control = false;
MyObject._x -= Adv;
if(MyObject._x < LimitX1){
Control = true;
}
}
}
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 originalvar LimitX1:Number = 0; //Límite Izquierdo
var LimitX2:Number = 400; //Límite Derecho
var Control:Boolean = true; //Control para las condiciones
var Adv:Number = 5; //Cantidad de avance (cuadros)
var RotationSpeed:Number = 5; //Velocidad de rotación
var MyObject:Object = _root.flecha_mc; //el objeto con el que trabajarás
onEnterFrame = function(){
if((MyObject._x < LimitX2) && !(MyObject._x < (LimitX1-Adv)) && Control){
MyObject._x += Adv;
}else{
Control = false;
MyObject._x -= Adv;
MyObject._rotation+=RotationSpeed;
if(MyObject._x < LimitX1){
Control = true;
}
}
}
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 originalvar LimitX1:Number = 0; //Límite Izquierdo
var LimitX2:Number = 400; //Límite Derecho
var Control:Boolean = true; //Control para las condiciones
var Adv:Number = 5; //Cantidad de avance (cuadros)
var RotationSpeed:Number = 5; //Velocidad de rotación
var RotationAngle:Number = 180; //Ángulo de rotación
var MyObject:Object = _root.flecha_mc; //el objeto con el que trabajarás
onEnterFrame = function(){
if((MyObject._x < LimitX2) && !(MyObject._x < (LimitX1-Adv)) && Control){
MyObject._x += Adv;
if(MyObject._rotation == RotationAngle){
MyObject._rotation = 0;
}
}else{
Control = false;
MyObject._x -= Adv;
if(MyObject._rotation < RotationAngle){
MyObject._rotation+=RotationSpeed;
}
if(MyObject._x < LimitX1){
Control = true;
}
}
}
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 !!!!