Latest Tweets:
Soy Rodrigo Tena a.k.a "tenachico" al menos eso he creido hasta ahora.
Ask me anything | Submit | Archive | RSS
PARAR NAVE Y REANUDAR (funciones y variables)
Para este ejercicio importamos una nave a nuestra biblioteca y la convertimos en movieclip y le damos como nombre de instancia “nave_mc” y creamos un boton con las herramientas de diseño de flash, lo convertimos en movieclip y le damos como nombre de instancia boton_mc.
Ahora le metemos mano al código de actionscript:
Primero hacemos una variable numérica que más adelante definirá la velocidad a la que avanzará nave_mc.
Así:
var velocidad:Number=10;
Para que al comenzar la animación la nave se ponga en movimiento creamos la función iniciar, que sera una función Event con un EventListener ENTER_FRAME, esto quiere decir que el evento ante el que responderá el código sera al entrar en la animación (ENTER_FRAME).
Ahora bien, para definir el movimiento de la nave, diremos que su punto x se incremente en 10 unidades cada fotograma para ello usamos la expresión “+=”.
Para que la nave al salir por el borde derecho del escenario reaparezca por el izquierdo usamos un condicional (if) que establece lo siguiente si el punto x de la nave “nave_mc.x” es mayor que la anchura del escenario ”stage.stageWidth” entonces “{” el punto x de la nave es igual a 0, o sea el extremo izquierdo del escenario.
Este tramo de código quedaría así:
function iniciar (e:Event):void{
nave_mc.x += velocidad;
if(nave_mc.x>stage.stageWidth){
nave_mc.x =0-nave_mc.width;}
}
stage.addEventListener(Event.ENTER_FRAME, iniciar);
Ahora debemos establecer las ordenes que hagan parar al nave al presionar el boton y reanudar el movimiento al presionar el boton de nuevo. El código para parar es este:
function parar (e:MouseEvent):void{
stop();
stage.removeEventListener(Event.ENTER_FRAME, iniciar);
boton_mc.removeEventListener(MouseEvent.CLICK, parar);
boton_mc.addEventListener(MouseEvent.CLICK,reanudar);
}
boton_mc.addEventListener(MouseEvent.CLICK, parar);
Expliquémoslo: Hacemos una función “parar” que es una función MouseEvent porque responde a una acción del ratón y lo que hace es parar toda acción en la animación “stop()” ,quitar el interruptor que escuchaba el evento inicial para que no contradiga las posteriores órdenes stage.removeEventListener (Event.ENTER_FRAME, iniciar).
Y ahora viene lo más lioso quitamos el Interruptor que escucha esta función y añadimos un interruptor que eschuchará la siguiente función para que la nave se mueva.
Por fuera de la función colocamos un interruptor para la función parar “boton_mc.addEventListener (MouseEvent.CLICK, parar)” ¿por qué funciona si en la función lo hemos inutilizado? la razón es sencilla y es de orden, puesto que la función no se ejecuta hasta que presionamos por primera vez.
La función reanudar que hará que la nave se ponga de nuevo en movimiento emplea la misma lógica. Y su código es:
function reanudar (e:MouseEvent):void{
play();
stage.addEventListener(Event.ENTER_FRAME,iniciar);
boton_mc.removeEventListener(MouseEvent.CLICK, reanudar);
boton_mc.addEventListener(MouseEvent.CLICK,parar);
}
El código al completo quedará así:
var velocidad:Number=10;
function iniciar (e:Event):void{
nave_mc.x += velocidad;
if(nave_mc.x>stage.stageWidth){
trace(nave_mc.x);
nave_mc.x =0-nave_mc.width;}
}
stage.addEventListener(Event.ENTER_FRAME, iniciar);
function parar (e:MouseEvent):void{
stop();
stage.removeEventListener(Event.ENTER_FRAME, iniciar);
boton_mc.removeEventListener(MouseEvent.CLICK, parar);
boton_mc.addEventListener(MouseEvent.CLICK,reanudar);
}
boton_mc.addEventListener(MouseEvent.CLICK, parar);
function reanudar (e:MouseEvent):void{
play();
stage.addEventListener(Event.ENTER_FRAME,iniciar);
boton_mc.removeEventListener(MouseEvent.CLICK, reanudar);
boton_mc.addEventListener(MouseEvent.CLICK,parar);
}
ARKANOID (variables, funciones y condicionales)
Para hacer ese Arkanoid tenemos que crear en la escena el movieclip F8 de la pelota (con nombre de instancia barra_mc) y la barrita (barra_mc).
Y el siguiente código que explico aquí abajo:
-Unas variables numéricas llamadas velocidadx e y para determinar la velocidad del movimiento de la pelota en el eje horizontal (eje x) y el movimento en el eje vertical (eje y). Así:
var velocidady:Number=10;
var velocidadx:Number=10;
-Una función (function) de movimiento con el incremento positivo (+=) de la posición x e y, de la bola. En este caso el incremento sera de 10 puesto que viene determinado por las variables anteriores (velocidadx, velocidady).Así:
function movimiento(e:Event):void{
bola_mc.x +=velocidadx;
bola_mc.y +=velocidady;
-Dentro de la misma función el movimiento de la barra, muy sencillo puesto que sólo tendrá movimiento en el ejex y la posisión x de la barra será la mismo que la del ratón.
barra_mc.x=mouseX;
-De nuevo en la misma función, los limites laterales, inferior y superior del juego. Para estos límites usaremos unos condicionales (if).Explicaré el primero y el resto se pueden deducir por analogía. Código:
if (bola_mc.x>stage.stageWidth-bola_mc.width/2){
velocidadx=-velocidadx;
}
Explicación: si (el punto x de la bolita es mayor que la anchura de la escena menos la anchura de nuestra bola partida por mitad, recordad que el pto.x de la bola se encuentra en su extremo izquierdo) entonces {la variable velocidad se convierte en negativa, de tal manera que el desplazamiento hacia la derecha cambia de dirección}
El resto de condicionales tienen este código, excepto uno que explicaré después:
if (bola_mc.x<0+bola_mc.width/2){
velocidadx=-velocidadx;
}
if (bola_mc.y>stage.stageHeight+bola_mc.height/2){
bola_mc.y=15;
}
if(bola_mc.y<0+bola_mc.height/2){
velocidady=-velocidady;
}
-Hay un condicional en esta función que merece especial atención y es el que define que sucede cuando la bolita (bola_mc) golpea la barra (hitTestObject). Entonces su movimiento en el eje y se invertira. Así:
if(bola_mc.hitTestObject(barra_mc)){
velocidady=-velocidady;
}
}
-Para que todo funcioné colocaremos un interruptor de
stage.addEventListener (Event.ENTER_FRAME, movimiento);
Nuevo trabajo web de: www.tenachico.com
¡MÁS MADERA!