Foros del Web » Creando para Internet » Flash y Actionscript »

movimiento

Estas en el tema de movimiento en el foro de Flash y Actionscript en Foros del Web. Hola estoy haciendo una animación y estoy queriendo utilizar código para mover un objeto : _x += (200-_x)/6 lo que sucede con esto es que ...
  #1 (permalink)  
Antiguo 03/03/2003, 18:39
Avatar de gagarin  
Fecha de Ingreso: enero-2002
Ubicación: Madrid
Mensajes: 550
Antigüedad: 15 años, 11 meses
Puntos: 4
movimiento

Hola estoy haciendo una animación y estoy queriendo utilizar código para mover un objeto :

_x += (200-_x)/6

lo que sucede con esto es que empieza a hacer el movimiento a una velocidad y poco a poco la va disminuiendo, esto es por el /6, y yo quiero que siempre se mueva a la misma velocidad y no logro hacerlo, alguien me puede ayudar
  #2 (permalink)  
Antiguo 03/03/2003, 19:39
Avatar de GhostRider  
Fecha de Ingreso: julio-2001
Ubicación: en mi propio infierno
Mensajes: 248
Antigüedad: 16 años, 4 meses
Puntos: 0
lo que varía la velocidad es la variable _x en la operación, si puesieras por ejemplo solo += 200/6 sería una velocidad constante
  #3 (permalink)  
Antiguo 03/03/2003, 19:41
Avatar de axa
axa
 
Fecha de Ingreso: enero-2002
Mensajes: 396
Antigüedad: 15 años, 10 meses
Puntos: 0
La propiedad _x y _y de un Movie Clip sirve para asignar/leer las coordenadas x y y del mismo.

Ahora, si quieres mover un mc 20 pixels a la derecha de donde esta actualmente lo que tienes que hacer es sumarle 20 a la propiedad _x:

Código:
movieClip._x = movieClip._x + 20;
que es igual a:
Código:
movieClip._x += 20;
Si quieres que se mueva constantemente puedes asignar la accion a un evento que se repita continuamente... (puede ser onEnterFrame o con setInterval). Todo depende de lo que quieras.

Por ejemplo, para mover un mc desde el punto (100, 100) al punto (300, 100) (200 pixels a la derecha), en un segundo usando setInterval:

En el primer frame de la pelicula principal:
Código:
clip._x=100;
clip._y=100;

function mover() {
	if (clip._x<300) {
		clip._x +=2;
	}
	else {
		clearInterval(interval);
	}
	updateAfterEvent();
}

interval = setInterval(mover, 10);
stop();
Donde clip es el nombre de una instancia de mc que esta en el stage.

updateAfterEvent, lo que hace es refrescar la imagen de la pantalla cada vez que se mueva clip.

interval = setInterval(mover, 10); = hace que cada 10 milisegundos se llame a la funcion mover.

delete interval; = Elimina interval cuando el clip llega a la coordenada x 300
__________________
axa

Última edición por axa; 04/03/2003 a las 14:59
  #4 (permalink)  
Antiguo 04/03/2003, 02:12
Avatar de axa
axa
 
Fecha de Ingreso: enero-2002
Mensajes: 396
Antigüedad: 15 años, 10 meses
Puntos: 0
Con gusto...
Sabes que depende del frame rate de la pelicula cada vez que pasa un frame se renderiza la imagen en la pantalla...

Ahora... hay eventos de clip que se ejecutan inmediatemente, como onMouseDown(), onMouseUp(), onKeyUp(), etc...

Para asegurarte de que el cambio que haces en la imagen se vea, debes usar la funcion updateAfterEvent(), que lo que hace es refrescar la imagen de la pantalla en el momento que es llamada.

Para verlo mejor has lo siguiente.

(voy a explicarlo paso por paso para los que no saben bien)

Crea una nueva pelicula y le asignas 1 frame por segundo (Frame Rate = 1 fps) en la velocidad.
Crea un mc (una pelotica) y la pones en el stage, le asignas un nombre de instancia ("pelotica" podria ser).

Agregas estas acciones en el primer frame:

pelotica.onMouseDown = function() {
this._x += 10;
}

Prueba la pelicula... y le presionas el boton lo mas rapido que puedas... te das cuenta que se registran las pulsaciones pero solo se actualiza la imagen una vez por segundo, es decir, si le diste 4 veces en un segundo no vas a ver como se mueve "pelotica" 10 pixels cada vez, sino una sola vez se mueve 40 pixels.

Ahora solo pon esto en el boton:

pelotica.onMouseDown = function() {
this._x +=10;
updateAfterEvent();
}

y veras que independientemente del frame rate de la pelicula vas a ver los cambios una vez que se producen.

Se debe usar updateAfterEvent() para eventos de clip como:
onMouseUp();
onMouseDown();
onMouseMove();
onKeyDown();
onKeyUp();
y en la funcion
setInterval();

ya que se ejecutan independientemente del frame rate.

Para los eventos de boton no es necesario porque flash actualiza la imagen automaticamente cada vez que se produce.
__________________
axa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:39.