Construye un juego de minigolf con ActionScript 3.0

En este tutorial, te mostraré cómo crear un bonito juego de minigolf con ActionScript 3.0. Trabajaremos con Event Handlers, Functions y también con el objeto Timer, que es una característica realmente genial en AS3..




Introducción

Encontrarás que hay muchos dibujos involucrados con este proyecto. Si prefiere no hacer todo eso usted mismo, solo descargue el archivo programmeGolf.fla y vaya al Paso 19 donde comienza la parte de programación.

Paso 1: Nuevo archivo

Empecemos abriendo un nuevo archivo de ActionScript 3.0 Flash.

Paso 2: Configuración del documento

Cambie las dimensiones en el panel de propiedades (600 px por 400 px) y establezca la velocidad de fotogramas en 30 fps.

Paso 3: Creando el fondo

Ahora vamos a preparar algunos gráficos. Cree un rectángulo (600 px por 400 px) y colóquelo en las coordenadas 0, 0. Rellene el rectángulo con un degradado (# 0066FF a #FFFFFF).

Seleccione el objeto y presione F8. Elija Clip de película y llámelo "fondo".

Paso 4: Agregar nubes y árboles

Vaya al objeto de fondo (haga doble clic en él) y agregue algunos gráficos. Agregué nubes y árboles con solo seleccionar la herramienta de pincel y dibujar algunas formas simples. Haz esto en una nueva capa para mantener las cosas organizadas. Para las nubes utilicé un color azul claro (# 8FBBE8), para los árboles un color violeta claro (# 8DA5C7). Finalmente recorté las nubes y los árboles a lo largo de mi escenario..

Nubes

Arboles

Resultado final

Paso 5: Tierra

En la escena principal, cree un rectángulo (600 px por 50 px) y colóquelo en las coordenadas 0, 350. Rellene el rectángulo con un degradado (# 543201 a # 985B01).

Seleccione el objeto y presione F8. Seleccione Clip de película y llámelo "molido". Cambie su registro a la izquierda y exporte el objeto para ActionScript. Haga clic en Aceptar.

Paso 6: Hierba

Vaya al objeto de tierra (haga doble clic en él) y cree una nueva capa. Elija la herramienta primitiva de rectángulo (R), dibuje una forma (10px por 20px) y colóquela en las coordenadas 0, -35. Establecer el radio de la esquina a 4px.

Copia estos rectángulos en toda la longitud de la escena. Ahora, seleccione todos ellos, conviértalos en editables (Ctrl + B) y rellénelos con un degradado (# 009900 a # 35FD35).

Paso 7: Agujero

Ahora vamos a crear una forma que enmascarará nuestra tierra y hierba. Por lo tanto, el color no importa. Cree un rectángulo (900 px por 70 px) y colóquelo en las coordenadas -300, -40.

Cree una forma de "orificio" (20px por 40px) usando la herramienta Óvalo y Rectángulo, luego colóquela en las coordenadas 300, -40. Ahora asegúrese de que la forma de su agujero esté en la misma capa con nuestro rectángulo azul creado anteriormente. Si es así, selecciónalo y borra. Debes conseguir la forma final de la máscara..

Presiona F8 y conviértelo en un Clip de Película. Cambie el punto de registro a la izquierda y asígnele el nombre "grassMask". Una vez que haya creado su Clip de película, asígnele un nombre de instancia "grassMask".

Ahora deberíamos establecer el enmascaramiento. Haga doble clic en la capa donde se encuentra el objeto terrestre y seleccione la opción "enmascarado". Haz lo mismo con la capa de hierba. En la capa que contiene su objeto "grassMask" elija la opción "máscara". Ahora puedes dejar el objeto "molido" y volver al escenario principal..

Paso 8: Bandera

Seleccione la herramienta Pincel (B) y dibuje un objeto de estaca (# C25C00). Ahora elija la herramienta Rectángulo (R) y dibuje un objeto de marca (#FFDCDC). Selecciona los dos objetos y presiona F8. Seleccione Clip de película y llámelo "bandera". Cambie el punto de registro y expórtelo para ActionScript..

Paso 9: Personaje

Ahora empieza lo peor :) dibujando un personaje. Generalmente dibujo algo a mano y luego lo dibujo en Flash, así que vamos a usar mi imagen escaneada dibujada a mano. Descárguelo aquí e impórtelo en la biblioteca (Archivo> Importar> Importar a biblioteca ...). Cree un nuevo clip de película (Ctrl + F8) y asígnele el nombre "bearMC". Arrastre el oso de la biblioteca al escenario, bloquee la capa que contiene el mapa de bits y cree una nueva capa. Necesitamos separar partes del cuerpo para que cada parte esté en otra capa.

Paso 10: Partes del cuerpo

Vamos a empezar con una cabeza. Elija la herramienta de pincel (B). Seleccione la forma de círculo más grande y el color marrón (# 432801). Empieza a dibujar los contornos de la cabeza. Finalmente, puede seleccionar la herramienta Pintar pintura (K) y llenar la cabeza con colores. Bueno no es asi :) Haga lo mismo con los brazos, el cuerpo, las piernas y el palo de golf. No olvides colocar cada parte en capas separadas..

Paso 11: Ajuste de las partes del cuerpo

Ahora deberíamos hacer algunos cambios. En primer lugar, elimine la capa con su mapa de bits de oso (también deberíamos eliminar el mapa de bits de oso de la biblioteca). Ahora selecciona todo el personaje en todas las capas. Debido a que cargaremos el carácter dinámicamente utilizando ActionScript, necesitamos tener la escala correcta. Elija la herramienta de transformación libre (Q) y haga que el oso sea más pequeño (alrededor de 80 px de ancho).

Paso 12: Convertir partes del cuerpo en clips de película

Haga clic en el primer cuadro de la capa de la cabeza. Ahora se debe seleccionar toda la cabeza. Presiona F8 y llámalo "cabeza". Exportarlo para ActionScript también. Haga exactamente lo mismo con el cuerpo ("cuerpo"), los brazos ("brazos") y el palo ("palo").

Paso 13: Ajuste de los puntos de pivote

Cada objeto en Flash gira alrededor de un punto de pivote, por lo que tenemos que ajustar los puntos de pivote de nuestro brazo y brazos. Oculta tu capa de cabeza y cuerpo y selecciona la capa de barra y brazos. Deberías ver los puntos de pivote de nuestros objetos..

Cree algún tipo de marca en una capa separada donde realmente deberían estar los pivotes (entre los hombros) para permitir la rotación adecuada.

Ahora tome uno de los objetos y arrástrelo a la marca (el punto de pivote debe estar en la marca). Haz lo mismo con el segundo objeto..

Ahora muestre todas las capas y borre la marca que hicimos antes. Entra en el objeto de los brazos (haz doble clic en él) para que puedas colocar los brazos en la posición correcta.

Deja el objeto de los brazos y haz lo mismo con el palo..

Paso 14: Posicionar el oso

Ve a la escena principal y crea una nueva capa, llámala "oso". Toma "bearMC" de la biblioteca y arrástralo al escenario principal. Con nuestro "bearMC" seleccionado presione Ctrl + B. Ahora puedes borrar "bearMC" de la biblioteca.

Paso 15: Apple

Presiona Ctrl + F8 y crea un nuevo Clip de Película. Nómbrelo como "manzana" y exportarlo para ActionScript. Usa la herramienta Pincel (B) y dibuja una forma de manzana. También puede agregar hojas y un tallo si lo desea. Ahora seleccione todo el objeto y redúzcalo con la Herramienta de transformación libre (Q), con un ancho máximo de 20 px.

Paso 16: Animación de Apple

Seleccione el objeto entero de nuevo y presione F8. Nómbrelo como "AppleFall". El punto de registro debe estar en el medio. Asígnele un nombre de instancia "appleFall" en el panel de propiedades.

Entra en el objeto "appleFall" (haz doble clic en él). Crea una nueva capa y llámala "acción". Vaya al cuadro 7 y cree un nuevo fotograma clave (F6). Luego vaya al panel de acciones (F9) y escriba:

 detener();

Selecciona el primer cuadro y haz lo mismo..

Ahora agregue los fotogramas clave (F6) en los fotogramas segundo, cuarto, sexto y séptimo de la capa "manzana". Seleccione el segundo al sexto cuadro y cree una interpolación de movimiento (clic derecho> Crear interpolación de movimiento).

Ahora coloque las manzanas en los fotogramas clave aproximadamente en las posiciones que se muestran en la siguiente imagen.

Si todo está bien, puede volver a la escena principal y arrastrar un objeto "apple" de la biblioteca al escenario..

Paso 17: campo de texto

Crea una nueva capa y llámala "mensajes". Elige una herramienta de texto (T) y crea un nuevo campo de texto en el centro del escenario (elegí una fuente Arial azul). Establezca el tipo de campo en Texto dinámico y asigne un nombre de instancia "myMessage". Puedes bloquear la capa ahora.

Paso 18: Contador de puntajes

Crea una nueva capa y llámala "contador". De nuevo, arrastre un objeto de manzana de la biblioteca al escenario y colóquelo en 30, 30. Presione Ctrl + B dos veces (porque tenemos dos clips de película para romper Apple y AppleFall) y rellene el objeto con un color blanco. Haz cinco instancias y colócalas en una línea. Selecciona todos ellos y presiona F8. Denomínelo "counterBcg". Vaya al panel de propiedades y cambie el color de ninguno a alfa al 40%.

Arrastre una manzana de la biblioteca al escenario, colóquela a 30, 30 y presione Ctrl + B dos veces nuevamente. Presiona F8 y nombra el clip de la película "contador". Vaya a este objeto (haga doble clic en él) y agregue un fotograma clave más. En este fotograma clave, rellene la manzana con un color azul (esta manzana se mostrará en el mostrador si pierde el agujero).

Vaya al panel de acciones de cada fotograma clave (F9) y escriba:

 detener();

Ve a la escena principal, crea cinco instancias de la manzana, nuevamente formando una línea. Cada manzana tendrá un nombre de instancia ("a1", "a2", "a3", etc.).

Paso 19: Preparación para la programación

Aqui estamos. La parte del dibujo ha terminado. Tome un pedazo de papel y anote las coordenadas de la cabeza, los brazos, el cuerpo, el palo, la manzana, el suelo y la bandera para poder unirlos dinámicamente..

Ahora puedes borrarlos de la escena..

Aquí hay un rápido desglose de cómo abordaremos la programación:

  • Paso 20 Colocando y posicionando objetos.
    Todos los objetos están correctamente unidos y posicionados en la escena..
  • Paso 21 Mostrador
    Mostrador.
  • Paso 22 Programando el Stick
    Haciendo girar el palo.
  • Paso 23 Programando la manzana
    La manzana se mueve cuando el palo la golpea..
  • Paso 24 Golpear
    Si la manzana está lo suficientemente cerca, cae en el agujero..
  • Paso 25 Programando un contador
    Si fue un éxito, el contador agrega uno..
  • Paso 26 Creando el siguiente intento usando el objeto temporizador
    Una vez que el intento ha terminado, podemos intentarlo nuevamente después de dos segundos..
  • Paso 27 Añadiendo mensajes de texto
    Añadimos algunos mensajes para el jugador..
  • Paso 28 Juego terminado
    Si el juego está terminado, podemos jugar de nuevo..

Paso 20: Adjuntar y posicionar objetos

Toda la programación se coloca en el primer cuadro de la capa de acciones. Así que vamos a crear una nueva capa y llamémosle "acciones". En primer lugar, agregaremos tres bloques de comentarios a nuestro código:

 // Variables // EventListeners // Funciones

Cuando los comentarios estén listos, podemos agregar el siguiente código que adjuntará nuestros objetos de la biblioteca al escenario..

(Líneas adicionales 2-8, 13-23)

 // Variables var myHead = new head (); var myArms = new arms (); var myBody = nuevo cuerpo (); var myStick = new stick (); var myGround = new ground (); var myFlag = new flag (); var myApple = nueva manzana (); // EventListeners // Functions function resetScene (): void addChild (myHead); addChild (myArms); addChild (myBody); addChild (myStick); addChild (myGround); addChild (myFlag); addChild (myApple);  resetScene ();

Ahora tenemos todos nuestros objetos en la escena en las coordenadas 0, 0. Los objetos se adjuntan en la escena cada vez que se llama a la función resetScene. Volvamos a referirnos a nuestro papel donde anotamos las coordenadas. También usaremos una función aleatoria para generar la posición x de nuestro agujero y bandera.

(Líneas adicionales 9, 22-39)

 // Variables var myHead = new head (); var myArms = new arms (); var myBody = nuevo cuerpo (); var myStick = new stick (); var myGround = new ground (); var myFlag = new flag (); var myApple = nueva manzana (); var grassMask: Number; // EventListeners // Functions function resetScene (): void addChild (myBody); addChild (myArms); addChild (myHead); addChild (myStick); addChild (myGround); addChild (myFlag); addChild (myApple); grassMask = (320 + Math.random () * 260); myBody.x = 70; myBody.y = 296; myArms.x = 68; myArms.y = 276; myArms.rotation = 0; myHead.x = 70; myHead.y = 215; myStick.x = 68; myStick.y = 276; myStick.rotation = 0; miApple.x = 90; myApple.y = 331; myGround.x = 0; myGround.y = 375; myGround.grassMask.x = grassMask - 610; myFlag.x = grassMask; myFlag.y = 375;  resetScene ();

* grassMask: descripción variable

  1. Nuestro escenario es de 600px de largo.
  2. La función Math.random genera números del 0 al 1
  3. Si multiplicamos este valor por 260 obtendremos un número entre 0 y 260.
  4. Si luego sumamos 320 a este resultado, obtendremos el rango que estamos buscando: 320 a 580. Esta es la región a lo largo del eje x donde podemos colocar nuestro agujero y la bandera.

Paso 21: Contador

Todos los objetos deben colocarse correctamente y nuestra máscara y bandera deben estar en una posición x aleatoria. Agregue las siguientes líneas debajo de la función resetScene. Ocultará las manzanas para contar nuestra puntuación..

(Líneas adicionales 6-15)

... resetScene (); function invisibleApples (): void a1.visible = false; a2.visible = falso; a3.visible = falso; a4.visible = falso; a5.visible = falso; a6.visible = falso;  invisibleApples ();

Paso 22: Programando el Stick

Ahora agregaremos oyentes para nuestro teclado. Si presionamos cualquier tecla, se llamará a la función onDown. Si entonces soltamos alguna tecla, se llamará a la función onUp. También necesitamos añadir un escucha de marco de entrada..

El principio es muy simple; si presiona cualquier tecla, el verificador de variables contendrá el valor 1. Si suelta la tecla, el verificador de variables contendrá un valor de 0. La función Hit, que aparece en cada cuadro de nuestro programa (30 veces por segundo en Nuestro caso) actuará a lo largo de esos valores (rotación afirmativa o negativa). Las variables speedUp y speedDown son solo números que nos dicen qué tan grande será la rotación. Las variables minPower y maxPower nos indican el grado mínimo y máximo de rotación de la palanca. Escriba las siguientes líneas:

(Líneas adicionales 12,13,18-37)

 // EventListeners stage.addEventListener (KeyboardEvent.KEY_DOWN, onDown); stage.addEventListener (KeyboardEvent.KEY_UP, onUp); stage.addEventListener (Event.ENTER_FRAME, hit); // Funciones ... myFlag.x = grassMask; myFlag.y = 375; verificador = 0; minPower = 0;  resetScene (); function onDown (e: KeyboardEvent): void checker = 1; minPower = -20;  function onUp (e: KeyboardEvent): void checker = 0;  función hit (e: Evento): void if ((checker == 1) && (myStick.rotation < maxPower))  myStick.rotation += speedUp; myArms.rotation += speedUp;  else  if(myStick.rotation > minPower) myStick.rotation - = speedDown; myArms.rotation - = speedDown; 

Estamos usando algunas variables nuevas en el código, así que tenemos que inicializarlas. Agrega las siguientes líneas a la parte superior. Las variables checker y minPower se declaran en la función resetScene porque se cambiarán durante el programa y tendremos que restablecerlas más tarde.

(Líneas adicionales 7-17)

 // Variables… var myApple = new apple (); var grassMask: Number; var speedUp: int = 2; var speedDown: int = speedUp * 8; corrector var: int; var minPower: int; var maxPower: int = 110;

Paso 23: Programando una Apple

Usaremos el método hitTestObject para recuperar información sobre la colisión entre nuestro palo y la manzana. Si ocurre una colisión, se llamará a la función de disparo..

(Líneas adicionales 7,8,16,30-32,36-40)

 // Variables… var minPower: int; var maxPower: int = 110; fuerza var: Número; var applePower: Número; // Funciones ... function onUp (e: KeyboardEvent): void checker = 0; applePower = (myApple.x + myStick.rotation) * 3.2; … Función hit (e: Evento): void if ((checker == 1) && (myStick.rotation < maxPower))  myStick.rotation += speedUp; myArms.rotation += speedUp;  else  if(myStick.rotation > minPower) myStick.rotation - = speedDown; myArms.rotation - = speedDown;  if (myStick.hitTestObject (myApple)) stage.addEventListener (Event.ENTER_FRAME, disparo);  disparo de función (e: Evento): void strength = (applePower - myApple.x); miApple.x + = fuerza / 30; myApple.rotation + = fuerza / 4; 

Paso 24: Hit

Disparar debería funcionar. Ahora vamos a codificar una manzana cayendo en el agujero. Estaremos probando en nuestra función de disparo si la distancia desde el agujero es lo suficientemente pequeña y la fuerza es lo suficientemente baja. Si este fuera el caso, podemos reproducir nuestro clip donde una manzana cae en el agujero. Mis reglas (valores numéricos) son muy estrictas. Puedes definir tus propias reglas más ligeras si lo prefieres..

(Lineas adicionales 17,27-34,37,38)

 // Variables… var strength: Number; var applePower: Número; distancia var: Número; objetivo var: int; // Funciones función resetScene (): void … checker = 0; minPower = 0; objetivo = 0;  resetScene ();… disparo de función (e: Evento): void strength = (applePower - myApple.x); distance = grassMask - myApple.x; if ((Math.round (distancia) <= 10) && (Math.round(distance) >= 3) && (fuerza <= 65))  if(target == 0)  myApple.appleFall.play(); myApple.rotation = 0; target = 1;   else  if(strength > 5) myApple.x + = fuerza / 30; myApple.rotation + = fuerza / 4; 

Aquí hay un desglose de cómo funciona realmente la función de disparo. Es muy sencillo. Agregaremos algunas líneas más adelante, pero este es el núcleo..

Esquema de función de disparo

  • Establecer la fuerza de la variable
  • Establecer variable de distancia

Si la distancia y la fuerza son bajas y el objetivo aún no ha sido alcanzado

  • Juega el clip con la manzana cayendo en el agujero
  • Establecer la rotación de la manzana a cero
  • Dile a nuestra variable que el objetivo fue alcanzado

Si la distancia y la fuerza no están al lado de nuestros valores. y si la fuerza todavía es lo suficientemente grande - inferior a 5 y la manzana deja de moverse

  • Apple sigue moviéndose a lo largo del eje x
  • Apple sigue girando

Paso 25: Programando el contador

Ahora vamos a hacer un contador de puntuación. Primero tenemos que inicializar una nueva variable llamada tryShot; cuenta los intentos que nos quedan incrementando uno cada vez que se llama a la función resetScene. Si golpeamos el agujero aparecerá una manzana. Si perdemos el agujero, también aparecerá una manzana, pero saltará al segundo fotograma del clip (mostrando una manzana azul).

(Líneas adicionales 6,7,15,16,31,37-40)

 // Variables… var distancia: Número; objetivo var: int; var tryShot: int = 0; // Functions function resetScene (): void … minPower = 3; objetivo = 0; tryShot ++;  resetScene ();… disparo de función (e: Evento): void strength = (applePower - myApple.x); distance = grassMask - myApple.x; if ((Math.round (distancia) <= 10) && (Math.round(distance) >= 3) && (fuerza <= 65))  if(target == 0)  myApple.appleFall.play(); myApple.rotation = 0; target = 1; this["a" + tryShot].visible = true;   else  if(strength > 5) myApple.x + = fuerza / 30; myApple.rotation + = fuerza / 4;  else this ["a" + tryShot] .visible = true; este ["a" + tryShot] .gotoAndStop (2); 

Paso 26: Creando el siguiente intento usando el objeto Timer

Agregue las siguientes líneas en el código. Se asegurarán de que la función de cuenta regresiva (que restablece la escena y elimina al oyente para la función de disparo) se llamará dos segundos después de que termine cualquier disparo (no importa si el orificio fue o no fue golpeado). También tenemos que agregar una condición a nuestra función de hit que restringe el número de intentos a seis.

(Líneas adicionales 7,13,22,30,44,55,64,69-72)

 // Variables… var target: int; var tryShot: int = 0; var myTimer = new Timer (2000, 1); // EventListeners stage.addEventListener (KeyboardEvent.KEY_DOWN, onDown); stage.addEventListener (KeyboardEvent.KEY_UP, onUp); stage.addEventListener (Event.ENTER_FRAME, hit); myTimer.addEventListener (TimerEvent.TIMER, countDown); // Funciones de la función resetScene (): void ;… target = 0; tryShot ++; myApple.appleFall.gotoAndStop (1);  resetScene (); ... hit de función (e: Evento): void if (tryShot < 7)  if((checker == 1) && (myStick.rotation < maxPower))  myStick.rotation += speedUp; myArms.rotation += speedUp;  else  if(myStick.rotation > minPower) myStick.rotation - = speedDown; myArms.rotation - = speedDown;  if (myStick.hitTestObject (myApple)) stage.addEventListener (Event.ENTER_FRAME, disparo);  función de disparo (e: Evento): void strength = (applePower - myApple.x); distance = grassMask - myApple.x; if ((Math.round (distancia) <= 10) && (Math.round(distance) >= 3) && (fuerza <= 65))  if(target == 0)  myApple.appleFall.play(); myApple.rotation = 0; target = 1; this["a" + tryShot].visible = true; myTimer.start();   else  if(strength > 5) myApple.x + = fuerza / 30; myApple.rotation + = fuerza / 4;  else this ["a" + tryShot] .visible = true; este ["a" + tryShot] .gotoAndStop (2); myTimer.start ();  function countDown (e: TimerEvent): void resetScene (); stage.removeEventListener (Event.ENTER_FRAME, disparo); 

Paso 27: Agregar mensajes de texto

Ahora debemos crear algunos mensajes de texto, para que el jugador sepa lo que está pasando.

(Líneas adicionales 8,29-31,43,53)

 // Functions function resetScene (): void … tryShot ++; myApple.appleFall.gotoAndStop (1); myMessage.text = "Presiona cualquier tecla!";  resetScene (); ... hit de función (e: Evento): void if (tryShot < 7)  if((checker == 1) && (myStick.rotation < maxPower))  myStick.rotation += speedUp; myArms.rotation += speedUp;  else  if(myStick.rotation > minPower) myStick.rotation - = speedDown; myArms.rotation - = speedDown;  if (myStick.hitTestObject (myApple)) stage.addEventListener (Event.ENTER_FRAME, disparo);  else myMessage.text = "Game Over";  disparo de función (e: Evento): void strength = (applePower - myApple.x); distance = grassMask - myApple.x; if ((Math.round (distancia) <= 10) && (Math.round(distance) >= 3) && (fuerza <= 65))  if(target == 0)  myApple.appleFall.play(); myApple.rotation = 0; target = 1; this["a" + tryShot].visible = true; myMessage.text = "Cooool!"; myTimer.start();   else  if(strength > 5) myApple.x + = fuerza / 30; myApple.rotation + = fuerza / 4;  else this ["a" + tryShot] .visible = true; este ["a" + tryShot] .gotoAndStop (2); myMessage.text = "Bad Luck!"; myTimer.start (); 

Paso 28: Game Over

Como hemos creado un juego tan magnífico, hay muchas posibilidades de que nuestro jugador quiera volver a jugar :-) así que hagámoslo posible. Si el jugador llega a seis intentos (el bloque de código donde escribimos "Game Over") debemos agregar un oyente final a nuestro escenario. Es un detector de mouse y llama a una función si hace clic en cualquier lugar.

(Líneas adicionales 12-17,37,38,42,47)

 // Funciones ... función invisibleApples (): void a1.visible = false; a2.visible = falso; a3.visible = falso; a4.visible = falso; a5.visible = falso; a6.visible = falso; a1.gotoAndStop (1); a2.gotoAndStop (1); a3.gotoAndStop (1); a4.gotoAndStop (1); a5.gotoAndStop (1); a6.gotoAndStop (1); … Función hit (e: Evento): void if (tryShot < 7)  if((checker == 1) && (myStick.rotation < maxPower))  myStick.rotation += speedUp; myArms.rotation += speedUp;  else  if(myStick.rotation > minPower) myStick.rotation - = speedDown; myArms.rotation - = speedDown;  if (myStick.hitTestObject (myApple)) stage.addEventListener (Event.ENTER_FRAME, disparo);  else else myMessage.text = "Game Over \ nHaga clic para volver a jugar"; stage.addEventListener (MouseEvent.MOUSE_DOWN, playAgain);  function playAgain (e: MouseEvent): void resetScene (); invisibleApples (); tryShot = 1; stage.removeEventListener (MouseEvent.MOUSE_DOWN, playAgain); 

Código Final

 // Variables var myHead = new head (); var myArms = new arms (); var myBody = nuevo cuerpo (); var myStick = new stick (); var myGround = new ground (); var myFlag = new flag (); var myApple = nueva manzana (); var grassMask: Number; var speedUp: int = 2; var speedDown: int = speedUp * 8; corrector var: int; var minPower: int; var maxPower: int = 110; fuerza var: Número; var applePower: Número; distancia var: Número; objetivo var: int; var tryShot: int = 0; var myTimer = new Timer (2000, 1); // EventListeners stage.addEventListener (KeyboardEvent.KEY_DOWN, onDown); stage.addEventListener (KeyboardEvent.KEY_UP, onUp); stage.addEventListener (Event.ENTER_FRAME, hit); myTimer.addEventListener (TimerEvent.TIMER, countDown); // Función de la función resetScene (): void addChild (myBody); addChild (myArms); addChild (myHead); addChild (myStick); addChild (myGround); addChild (myFlag); addChild (myApple); grassMask = (320 + Math.random () * 260); myBody.x = 70; myBody.y = 296; myArms.x = 68; myArms.y = 276; myArms.rotation = 0; myHead.x = 70; myHead.y = 215; myStick.x = 68; myStick.y = 276; myStick.rotation = 0; miApple.x = 90; myApple.y = 331; myGround.x = 0; myGround.y = 375; myGround.grassMask.x = grassMask - 610; myFlag.x = grassMask; myFlag.y = 375; verificador = 0; minPower = 0; objetivo = 0; tryShot ++; myApple.appleFall.gotoAndStop (1); myMessage.text = "Presiona cualquier tecla!";  resetScene (); function invisibleApples (): void a1.visible = false; a2.visible = falso; a3.visible = falso; a4.visible = falso; a5.visible = falso; a6.visible = falso; a1.gotoAndStop (1); a2.gotoAndStop (1); a3.gotoAndStop (1); a4.gotoAndStop (1); a5.gotoAndStop (1); a6.gotoAndStop (1);  invisibleApples (); function onDown (e: KeyboardEvent): void checker = 1; minPower = -20;  function onUp (e: KeyboardEvent): void checker = 0; applePower = (myApple.x + myStick.rotation) * 3.2;  función hit (e: Evento): void if (tryShot < 7)  if((checker == 1) && (myStick.rotation < maxPower))  myStick.rotation += speedUp; myArms.rotation += speedUp;  else  if(myStick.rotation > minPower) myStick.rotation - = speedDown; myArms.rotation - = speedDown;  if (myStick.hitTestObject (myApple)) stage.addEventListener (Event.ENTER_FRAME, disparo);  else else myMessage.text = "Game Over \ nHaga clic para volver a jugar"; stage.addEventListener (MouseEvent.MOUSE_DOWN, playAgain);  function playAgain (e: MouseEvent): void resetScene (); invisibleApples (); tryShot = 1; stage.removeEventListener (MouseEvent.MOUSE_DOWN, playAgain);  disparo de función (e: Evento): void strength = (applePower - myApple.x); distance = grassMask - myApple.x; if ((Math.round (distancia) <= 10) && (Math.round(distance) >= 3) && (fuerza <= 65))  if(target == 0)  myApple.appleFall.play(); myApple.rotation = 0; target = 1; this["a" + tryShot].visible = true; myMessage.text = "Cooool!"; myTimer.start();   else  if(strength > 5) myApple.x + = fuerza / 30; myApple.rotation + = fuerza / 4;  else this ["a" + tryShot] .visible = true; este ["a" + tryShot] .gotoAndStop (2); myMessage.text = "Bad Luck!"; myTimer.start ();  function countDown (e: TimerEvent): void resetScene (); stage.removeEventListener (Event.ENTER_FRAME, disparo); 

Conclusión

Bastante simple no era? Ahora puedes tontear con todo tipo de cosas; puedes agregar otros niveles, terrenos, puedes cambiar el personaje, agregar trucos al juego, agregar un menú del juego o una introducción y así sucesivamente. Hay posibilidades ilimitadas, así que espero que les haya resultado útil y gracias por leer.!