Comunidad de diseño web y desarrollo en internet online

mapa tipo mario 3 en AS2

Citar            
MensajeEscrito el 27 Jun 2013 10:36 am
estoy intentando hacer un mapa para mi juego tipo mario 3...como el de este tutorial:



www.cristalab.com/tutoriales/ejemplo-de-guia-para-mapas-en-juegos-tipo-mario-3-c48015l/

el problema es que el tutorial está en AS3, y no lo domino muy bien.

He intentado traducir el código a AS2 y ya casi casi funciona, pero no a la perfección.
Éste es el código que he hecho:

Código ActionScript :

      var enMovimiento:Boolean = false;
   
   var contactoConCamino_Arriba:Boolean;
    var contactoConCamino_Abajo:Boolean;
    var contactoConCamino_Izquierda:Boolean;
    var contactoConCamino_Derecha:Boolean;

   velocidad = 2;
   
   function Mario()
      {
   lineas._visible = true;
    puntos._visible = true;
   var temporizador = setInterval(mover(), 10);

function comenzarIntervalo():Void
{
   temporizador = setInterval(this, "mover", 10);
}
      }
   
   function mover()
         {
         if (Key.getCode() == 39 && this.contactoConCamino_Derecha == true) // 39 es DERECHA
         {
            mario._x += velocidad;
         }
         if (Key.getCode() == 37 && this.contactoConCamino_Izquierda   == true) // 37 es IZQUIERDA
         {
            mario._x -= velocidad;
         }
         if (Key.getCode() == 38 && this.contactoConCamino_Arriba == true) // 39 es ARRIBA
         {
            mario._y -= velocidad;
         }
         if (Key.getCode() == 40 && this.contactoConCamino_Abajo == true) // 40 es ABAJO
         {
            mario._y += velocidad;
         }
       for (var i in puntos)
       {
            // En el mc llamado mario hay un MC llamado centro que sirve como detector..
            // ... de colisiones            
            // Si centro colisiona con cualquier punto se detiene
            if (mario.centro.hitTest(puntos[i]))
            {
               clearInterval(temporizador);
               enMovimiento = false;
            }
         }
      }
     
     function palparCaminos()
      {
         for(var i in lineas)
       {
            if (mario.arriba.hitTest(lineas[i]))
            {
               this.contactoConCamino_Arriba = true;
            }
            
            if (mario.abajo.hitTest(lineas[i]))
            {
               this.contactoConCamino_Abajo   = true;
            }
   
            if (mario.izquierda.hitTest(lineas[i]))
            {
               this.contactoConCamino_Izquierda   = true;
            }
            
            if (mario.derecha.hitTest(lineas[i]))
            {
               this.contactoConCamino_Derecha = true;
            }
         }
      }

     
    function tecla()
      {
         if (enMovimiento == false)
         {
            this.contactoConCamino_Arriba = false;
            this.contactoConCamino_Abajo   = false;
            this.contactoConCamino_Izquierda   = false;
            this.contactoConCamino_Derecha   = false;
            
            palparCaminos();
            comenzarIntervalo();
            enMovimiento = true;
         }
      }
         
onEnterFrame = function ()
{
         tecla();
         Mario();
   }
   


En concreto el fallo es que el personaje no se para en todos los puntos, sino en los que hacen esquina.
Lo que no he sabido "traducir" de AS3 a AS2 es esta línea:

stage.addEventListener (KeyboardEvent.KEY_DOWN, tecla);

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Jun 2013 03:27 pm
En AS2 el listener va directo al KeyBoard, no al Stage, algo asi como Key.addEventListener .... mirate la clase Key en la ayuda

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 28 Jun 2013 05:23 pm
No acabo el entenderte por completo...

Por chachon2

41 de clabLevel



 

safari
Citar            
MensajeEscrito el 28 Jun 2013 06:58 pm
¿Miraste la clase Key en la ayuda?
¿Viste la entrada addEventListener de esa misma clase?
¿Hay alli un ejemplo?

Tip: para obtener la ayuda, con el programa abierto, dale a F1

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 29 Jun 2013 12:44 am

solisarg escribió:

¿Miraste la clase Key en la ayuda?
¿Viste la entrada addEventListener de esa misma clase?
¿Hay alli un ejemplo?

Tip: para obtener la ayuda, con el programa abierto, dale a F1

Jorge

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 29 Jun 2013 12:47 am
gracias, jorge, estoy intentando arreglarlo gracias a tus consejos...aunque me viene otra duda...¿se puede ordenar a flash por medio de código que se está tocando una tecla cuando en realidad no se está tocando?
Muchas gracias. :) :)

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Jun 2013 09:28 am
Ya lo resolvi. Al menos en parte, ya que va un poco lento a veces, dando la sensación de que hay alguna orden que se repite...pero bueno, aquí está el código AS2 para el mapa:

Código ActionScript :

var enMovimiento:Boolean = false;

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

var temporizador:Number = setInterval(mover, 10);

function comenzarIntervalo():Void
{
   temporizador = setInterval(this, "mover", 10);
}

function loDemas()
{
   lineas._visible = true;
   puntos._visible = true;
   //keyListener
   var oyenteTeclas:Object = new Object();
   oyenteTeclas.onKeyDown = function()
   {
      if (Key.isDown(Key.LEFT))
      {
         tecla();
      }
      if (Key.isDown(Key.RIGHT))
      {
         tecla();
      }
      if (Key.isDown(Key.UP))
      {
         tecla();

         trace("hacia arriba");
      }
      if (Key.isDown(Key.DOWN))
      {
         tecla();
         
         trace("hacia abajo");
      }
   }
   Key.addListener(oyenteTeclas);
};



function tecla()
{
   if (enMovimiento == false)
   {
      contactoConCamino_Arriba = false;
      contactoConCamino_Abajo = false;
      contactoConCamino_Izquierda = false;
      contactoConCamino_Derecha = false;



      teclaPulsada = Key.getCode();
      palparCaminos();
      comenzarIntervalo();
      enMovimiento = true;
   }
}

function mover()
         {
       velocidad = 4;
         if (teclaPulsada == 39 && contactoConCamino_Derecha == true) // 39 es DERECHA
         {
            mario._x += velocidad;
         }
         if (teclaPulsada == 37 && contactoConCamino_Izquierda  == true) // 37 es IZQUIERDA
         {
            mario._x -= velocidad;
         }
         if (teclaPulsada == 38 && contactoConCamino_Arriba == true ) // 38 es ARRIBA
         {
            mario._y -= velocidad;
         }
         if (teclaPulsada == 40 && contactoConCamino_Abajo == true) // 40 es ABAJO
         {
            mario._y += velocidad;
         }
       
       
            // En el mc llamado mario hay un MC llamado centro que sirve como detector..
            // ... de colisiones            
            // Si centro colisiona con cualquier punto se detiene
            for (var i in puntos)
       {
            // En el mc llamado mario hay un MC llamado centro que sirve como detector..
            // ... de colisiones            
            // Si centro colisiona con cualquier punto se detiene
            if (mario.centro.hitTest(puntos[i]))
            {
               clearInterval(temporizador);
               enMovimiento = false;
            }
         }
      }



function palparCaminos()
{
   for (var i in lineas)
   {
      if (mario.arriba.hitTest(lineas[i]))
      {
         contactoConCamino_Arriba = true;
      }

      if (mario.abajo.hitTest(lineas[i]))
      {
         contactoConCamino_Abajo = true;
      }

      if (mario.izquierda.hitTest(lineas[i]))
      {
         contactoConCamino_Izquierda = true;
      }

      if (mario.derecha.hitTest(lineas[i]))
      {
         contactoConCamino_Derecha = true;
      }
   }
}

loDemas();


¡¡¡Espero que le sirva a alguien...!!!

Por chachon2

41 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.