Comunidad de diseño web y desarrollo en internet online

Problema Colision y Variables Booleanas AS3

Citar            
MensajeEscrito el 11 Oct 2011 06:42 pm
Estoy realizando un juego (al mejor estilo Pokemon, con la imagen se van a dar cuenta si algun dia lo jugaron), el tema es que tengo varios problemas:

El movimiento lo trabaje con variables booleanas y un evento KeyDown, si la key esta presionada se cambiar a true la variable y hace el movimiento que se encuentra en un Enter_Frame y se ejecuta con true (en este caso el movimiento es sobre los ejes), el drama aca es que si se esta moviendo para un lado y presiona otra tecla las dos quedan en true y el personaje va en diagonal (trate de solucionarlo con un IF pero no pude). Despues si colisiona contra la caja la velocidad se va a 0 y las variables se cambian a false, el problema es que al querer mover el personaje despues de que se frenaron se va trabando, osea (mirando la imagen) si colisiona con la caja que esta derecho del inicio del personaje y me quiero mover para abajo tengo que clickear la tecla varias veces hasta que salga del recuadro de la caja (lo que entiendo es que al mover para abajo detecta que esta colisionando el personaje y me manda la variable en false)...

Imagen:


Nose si se me entendio, si saben un metodo o como solucionarlo joya.


Codigo por las dudas:

Código :

import flash.events.KeyboardEvent;
import flash.events.Event;

var personaje:Pj = new Pj();
addChild(personaje);
personaje.x = 10;
personaje.y = 282;
personaje.scaleY = 1.6;
personaje.scaleX = 1.6;

var derecha:Boolean = false;
var izquierda:Boolean = false;
var abajo:Boolean = false;
var arriba:Boolean = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, movimiento);
function movimiento(movimiento:KeyboardEvent)
{
   if (movimiento.keyCode == 39)
   {
      derecha = true;
      trace("Derecha "+ derecha);
   }

   if (movimiento.keyCode == 37)
   {
      izquierda = true;
      trace("Izquierda " + izquierda);
   }

   if (movimiento.keyCode == 40)
   {
      abajo = true;
      trace("Abajo "+ abajo);
   }

   if (movimiento.keyCode == 38)
   {
      arriba = true;
      trace("Arriba "+ arriba);
   }

}

var velocidad:int = 3;

stage.addEventListener(Event.ENTER_FRAME, mover);
function mover(tipodeEvento:Event):void
{
   if (derecha == true)
   {
      velocidad = 2;
      personaje.x +=  velocidad;
   
      if (personaje.x >= stage.stageWidth - personaje.width)
      {
         derecha = false;
      }
      
      if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12))
   
   {
      velocidad = 0;
      derecha = false;
   
   }
   
   }

   if (izquierda == true)
   {
      velocidad = 2;
      personaje.x -=  velocidad;
      trace(personaje.x);
      
      if (personaje.x <= 0)
      {
         velocidad = 2;
         izquierda = false;
      }
      if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12))
   
   {
      velocidad = 0;
      izquierda = false;

   
   }
   
      
   }

   if (abajo == true)
   {1
      velocidad = 2;
      personaje.y +=  velocidad;
      
      if (personaje.y >= stage.stageHeight - personaje.width)
      {
         abajo = false;
      }
      
      if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12))
   
   {
      velocidad = 0;
      abajo = false;
   
   }
   
   }

   if (arriba == true)
   {
      velocidad = 2;
      personaje.y -=  velocidad;
      
      if (personaje.y <= 0)
      {
         arriba = false;
      }
      
      if(personaje.hitTestObject(caja2) || personaje.hitTestObject(caja) || personaje.hitTestObject(caja3)|| personaje.hitTestObject(caja4)|| personaje.hitTestObject(caja5)|| personaje.hitTestObject(caja6)|| personaje.hitTestObject(caja7)|| personaje.hitTestObject(caja8)|| personaje.hitTestObject(caja9)|| personaje.hitTestObject(caja10)|| personaje.hitTestObject(caja11)|| personaje.hitTestObject(caja12))
   
   {
      velocidad = 0;
      arriba = false;
   
   }
   
   }
}

var caja:HieloCubo = new HieloCubo();
addChild(caja);

caja.x = 23;
caja.y = 202;
caja.scaleY = .7;
caja.scaleX = .7;

var caja2:HieloCubo = new HieloCubo();
addChild(caja2);

caja2.x = 285;
caja2.y = 287;
caja2.scaleY = .7;
caja2.scaleX = .7;

var caja3:HieloCubo = new HieloCubo();
addChild(caja3);

caja3.x = 261;
caja3.y = 362;
caja3.scaleY = .7;
caja3.scaleX = .7;

var caja4:HieloCubo = new HieloCubo();
addChild(caja4);

caja4.x = 437;
caja4.y = 340;
caja4.scaleY = .7;
caja4.scaleX = .7;

var caja5:HieloCubo = new HieloCubo();
addChild(caja5);

caja5.x = 405;
caja5.y = 177;
caja5.scaleY = .7;
caja5.scaleX = .7;

var caja6:HieloCubo = new HieloCubo();
addChild(caja6);

caja6.x = 271;
caja6.y = 177;
caja6.scaleY = .7;
caja6.scaleX = .7;

var caja7:HieloCubo = new HieloCubo();
addChild(caja7);

caja7.x = 202;
caja7.y = 235;
caja7.scaleY = .7;
caja7.scaleX = .7;

var caja8:HieloCubo = new HieloCubo();
addChild(caja8);

caja8.x = 182;
caja8.y = 193;
caja8.scaleY = .7;
caja8.scaleX = .7;

var caja9:HieloCubo = new HieloCubo();
addChild(caja9);

caja9.x = 48;
caja9.y = 21;
caja9.scaleY = .7;
caja9.scaleX = .7;

var caja10:HieloCubo = new HieloCubo();
addChild(caja10);

caja10.x = 194;
caja10.y = 9;
caja10.scaleY = .7;
caja10.scaleX = .7;

var caja11:HieloCubo = new HieloCubo();
addChild(caja11);

caja11.x = 419;
caja11.y = 0;
caja11.scaleY = .7;
caja11.scaleX = .7;

var caja12:HieloCubo = new HieloCubo();
addChild(caja12);

caja12.x = 499;
caja12.y = 52;
caja12.scaleY = .7;
caja12.scaleX = .7;


Espero que me puedan ayudar, muchas gracias.

Por guii94

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Oct 2011 12:59 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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