Comunidad de diseño web y desarrollo en internet online

Ejemplo de guía para Mapas en juegos tipo Mario 3

Este es un mapa que trata de imitar al de Mario 3. Esta hecho en ActionScript 3.


(Mover las flechas del teclado para que se mueva Mario)


En el FLA hay un MovieClip que se llama puntos. Aquí dentro están todos los puntos que le van a decir a Mario donde parar. También hay otro Movie Clip que se llama lineas, que le sirve a Mario de Guía.

Lo que me gusta del código, es que Mario se guía no por el código, si no por los puntos y lineas que hay en el FLA. Esto hace que uno pueda hacer cualquier camino, en cualquier configuración de manera gráfica, y no por código.
En esta flash, se entiende mejor como funciona.


(Mover las flechas del teclado para que se mueva Mario)


Código :

package 
{
   import flash.display.*;
   import flash.events.*;
   import flash.ui.Keyboard;
   import flash.utils.Timer;

   public class Mario extends MovieClip
   {

      private var enMovimiento:Boolean = false;
      private var temporizador:Timer = new Timer(10,0);
      private var teclaPulsada:uint;
      private var contendorPuntos:Sprite = new Sprite();

      private var contactoConCamino_Arriba:Boolean;
      private var contactoConCamino_Abajo:Boolean;
      private var contactoConCamino_Izquierda:Boolean;
      private var contactoConCamino_Derecha:Boolean;

      public function Mario()
      {
         lineas.visible = false;
         puntos.visible = false;
         stage.addEventListener(KeyboardEvent.KEY_DOWN,tecla);
         temporizador.addEventListener(TimerEvent.TIMER,mover);
      }
      private function tecla(e:KeyboardEvent):void
      {
         if (enMovimiento == false) {
            this.contactoConCamino_Arriba= false;
            this.contactoConCamino_Abajo= false;
            this.contactoConCamino_Izquierda= false;
            this.contactoConCamino_Derecha= false;

            teclaPulsada = e.keyCode;
            palparCaminos();
            temporizador.start();
            enMovimiento = true;
         }

      }
      private function mover(e:TimerEvent):void
      {

         var velocidad:uint = 2;

         if (teclaPulsada == 39 && this.contactoConCamino_Derecha == true) // 39 es RIGHT
         {
            mario.x += velocidad;
         }
         if (teclaPulsada == 37 && this.contactoConCamino_Izquierda== true) // 37 es LEFT
         {
            mario.x -= velocidad;
         }
         if (teclaPulsada == 38 && this.contactoConCamino_Arriba == true) // 39 es UP
         {
            mario.y -= velocidad;
         }
         if (teclaPulsada == 40 && this.contactoConCamino_Abajo== true) // 40 es DOWN
         {
            mario.y += velocidad;
         }

         for (var i:uint = 0; i <= puntos.numChildren-1; i++) {
            // En el mc llamado mario hay un MC llamado centro que sirve como detector..
            // ... de coliciones
            // Si centro coliciona con cualquier punto se detiene
            if (mario.centro.hitTestObject(puntos.getChildAt(i)) == true) {
               temporizador.stop();
               enMovimiento = false;
            }
         }
      }
      // Funcion que le indica a Mario, que caminos puede cojer
      // Mas tecnico. Dependiendo de que lineas tenga arriba, abajo, derecha o izquierda...
      // ...se podra mover en una direccion
      // En el MC llamado mario hay 4 MC que sirven como vigotes de un gato, para saber..
      // que lineas tiene cerca

      private function palparCaminos():void
      {
         for (var i:uint = 0; i <= lineas.numChildren-1; i++) {
            if (mario.arriba.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Arriba= true;
            }
            if (mario.abajo.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Abajo= true;
            }
            if (mario.izquierda.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Izquierda= true;
            }
            if (mario.derecha.hitTestObject(lineas.getChildAt(i)) == true) {
               this.contactoConCamino_Derecha= true;
            }
         }
      }
   }
}


Descargar archivos

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate