Comunidad de diseño web y desarrollo en internet online

Problema con detección de presion de tecla al subir un swf a internet

Citar            
MensajeEscrito el 07 May 2012 06:30 pm
HOLA !Estoy haciendo un juego en el que el personaje camina y salta al presionar ciertas teclas, al publicar desde flash todo funciona pero al subir y acceder al swf desde internet deja de funcionar todo.

este es el código que uso:

Código ActionScript :

var yVelPer:Number = 1;
var xVelPer:Number = 5;
var pesoPer:Number = 10;
var saltoPer:Number = -12;
onEnterFrame = function ()
{
   if (Key.isDown(Key.UP))
   {
      if (Key.isDown(Key.RIGHT))
      {
         personaje_mc.gotoAndStop("SaltoFrente");
         personaje_mc._xscale = 100;
      }
      else if (Key.isDown(Key.LEFT))
      {
         personaje_mc.gotoAndStop("SaltoFrente");
         personaje_mc._xscale = -100;
      }
      else
      {
         personaje_mc.gotoAndStop("Salto");
      }
   }
   else if (Key.isDown(Key.RIGHT))
   {
      personaje_mc.gotoAndStop("CaminaR");
      personaje_mc._xscale = 100;
      if (_root.personaje_mc._x < (Stage.width) - 100)
      {
         _root.mc_l0._x = _root.mc_l0._x - 1;
         _root.mc_l1._x = _root.mc_l1._x - 1.6;
         _root.mc_l15._x = _root.mc_l15._x - 2;
         _root.mc_l17._x = _root.mc_l17._x - 2.5;
         _root.mc_l2._x = _root.mc_l2._x - 3;
         _root.suelo_mc._x = _root.mc_l2._x - 3;
         _root.mascara._x = _root.suelo_mc._x - 3;
         _root.mc_l3._x = _root.mc_l3._x - 5;
         _root.mc_l4._x = _root.mc_l4._x - 8;
      }
   }
   else if (Key.isDown(Key.LEFT))
   {
      personaje_mc.gotoAndStop("CaminaR");
      personaje_mc._xscale = -100;
      if (_root.personaje_mc._x > 100)
      {
         _root.mc_l0._x = _root.mc_l0._x + 1;
         _root.mc_l1._x = _root.mc_l1._x + 1.6;
         _root.mc_l15._x = _root.mc_l15._x + 2;
         _root.mc_l17._x = _root.mc_l17._x + 2.5;
         _root.mc_l2._x = _root.mc_l2._x + 3;
         _root.suelo_mc._x = _root.suelo_mc._x + 3;
         _root.mascara._x = _root.mc_l2._x + 3;
         _root.mc_l3._x = _root.mc_l3._x + 5;
         _root.mc_l4._x = _root.mc_l4._x + 8;
      }
   }
   else
   {
      personaje_mc.gotoAndStop("Normal");
      _global.numerito = 0;
   }
   //Gravedad
   if (suelo_mc.hitTest(personaje_mc._x, personaje_mc._y + personaje_mc._height / 2, true))
   {
      if (Key.isDown(Key.UP))
      {
         yVelPer = saltoPer;
         personaje_mc._y += yVelPer;
      }
      else
      {
         yVelPer = 0;
      }
   }
   else if (suelo_mc.hitTest(personaje_mc._x, personaje_mc._y - personaje_mc._height / 2, true))
   {
      yVelPer = yVelPer * -1;
      personaje_mc._y += yVelPer;
   }
   else
   {
      personaje_mc._y += yVelPer;
      if (yVelPer <= pesoPer)
      {
         yVelPer++;
      }
   }
   //personaje_mc._x += Key.isDown(Key.RIGHT) * xVelPer;
   //personaje_mc._x -= Key.isDown(Key.LEFT) * xVelPer;
   //Colisiones
   while (suelo_mc.hitTest(personaje_mc._x, -2 + personaje_mc._y + personaje_mc._height / 2, true))
   {
      personaje_mc._y--;
   }
   while (suelo_mc.hitTest(personaje_mc._x, personaje_mc._y - personaje_mc._height / 2, true))
   {
      personaje_mc._y++;
   }
   while (suelo_mc.hitTest(personaje_mc._x + personaje_mc._width / 2, personaje_mc._y, true))
   {
      personaje_mc._x--;
   }
   while (suelo_mc.hitTest(personaje_mc._x - personaje_mc._width / 2, personaje_mc._y, true))
   {
      personaje_mc._x++;
   }
};



Aqui les dejo el enlace http://tenoch.mx/lupeHit.swf

Alguien sabe como se puede resolver este problema?

Gracias de Antemano

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 12:07 pm
¿Quizas por la ineficiencia del código? Considera sacar toda la lógica fuera del onEnterFrame y usar listener para las teclas, usualmente las teclas cambian una variable que si es chequeada en el onEnterFrame para generar un movimiento

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 May 2012 04:55 pm
OKas
seria algo asi

Código :

var listener:Object = new Object();
listener.onKeyDown = function()
{
   if (Key.getCode() == Key.RIGHT)
   {
      derecha();
   }
   if (Key.getCode() == Key.LEFT)
   {
      izquierda();
   }
};
listener.onKeyUp = function()
{
   if (Key.getCode() == Key.RIGHT)
   {
      _global.numerito = 0;
   }
   if (Key.getCode() == Key.LEFT)
   {
      _global.numerito = 0;
   }
};
Key.addListener(listener);

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 06:15 pm

Código :

function derecha()
{
   _root.personaje_mc.gotoAndStop("CaminaR");
   _root.personaje_mc._xscale = 100;
   if (_root.personaje_mc._x < (Stage.width) - 100)
   {
      _root.mc_l0._x = _root.mc_l0._x - 1;
      _root.mc_l1._x = _root.mc_l1._x - 1.6;
      _root.mc_l15._x = _root.mc_l15._x - 2;
      _root.mc_l17._x = _root.mc_l17._x - 2.5;
      _root.mc_l2._x = _root.mc_l2._x - 3;
      _root.suelo_mc._x = _root.mc_l2._x - 3;
      _root.mascara._x = _root.suelo_mc._x - 3;
      _root.mc_l3._x = _root.mc_l3._x - 5;
      _root.mc_l4._x = _root.mc_l4._x - 8;
   }
}

function izquierda()
{

   _root.personaje_mc.gotoAndStop("CaminaR");
   _root.personaje_mc._xscale = -100;
   if (_root.personaje_mc._x > 100)
   {
      _root.mc_l0._x = _root.mc_l0._x + 1;
      _root.mc_l1._x = _root.mc_l1._x + 1.6;
      _root.mc_l15._x = _root.mc_l15._x + 2;
      _root.mc_l17._x = _root.mc_l17._x + 2.5;
      _root.mc_l2._x = _root.mc_l2._x + 3;
      _root.suelo_mc._x = _root.suelo_mc._x + 3;
      _root.mascara._x = _root.mc_l2._x + 3;
      _root.mc_l3._x = _root.mc_l3._x + 5;
      _root.mc_l4._x = _root.mc_l4._x + 8;
   }
}

function uppie()
{
   _root.personaje_mc.gotoAndStop("Normal");
   _global.numerito = 0;
}

function salto()
{
   yVelPer = saltoPer;
   personaje_mc._y += yVelPer;
}


var listener:Object = new Object();
listener.onKeyDown = function()
{
   if (Key.getCode() == Key.RIGHT)
   {
      derecha();
   }
   if (Key.getCode() == Key.LEFT)
   {
      izquierda();
   }
};
listener.onKeyUp = function()
{
   if (Key.getCode() == Key.RIGHT)
   {
      uppie();
   }
   if (Key.getCode() == Key.LEFT)
   {
      uppie();
   }
   if (Key.getCode() == Key.UP)
   {
      yVelPer = 0;
   }

};
Key.addListener(listener);


y para simular la gravedad seria

Código :

var yVelPer:Number = 1;
var xVelPer:Number = 5;
var pesoPer:Number = 10;
var saltoPer:Number = -12;
onEnterFrame = function ()
{
   //Gravedad
   if (suelo_mc.hitTest(personaje_mc._x, personaje_mc._y + personaje_mc._height / 2, true))
   {
      /*listener.onKeyDown = function()
      {
      if (Key.getCode() == Key.RIGHT)
      {
      derecha();
      }
      if (Key.getCode() == Key.LEFT)
      {
      izquierda();
      }
      if (Key.getCode() == Key.UP)
      {
      salto();
      }
      };*/
      /**/
      if (Key.isDown(Key.UP))
      {
         yVelPer = saltoPer;
         personaje_mc._y += yVelPer;
      }
      else
      {
         yVelPer = 0;
      }
   }
   else if (suelo_mc.hitTest(personaje_mc._x, personaje_mc._y - personaje_mc._height / 2, true))
   {
      yVelPer = yVelPer * -1;
      personaje_mc._y += yVelPer;
   }
   else
   {
      personaje_mc._y += yVelPer;
      if (yVelPer <= pesoPer)
      {
         yVelPer++;
      }
   }
   //personaje_mc._x += Key.isDown(Key.RIGHT) * xVelPer;
   //personaje_mc._x -= Key.isDown(Key.LEFT) * xVelPer;
   //Colisiones
   while (suelo_mc.hitTest(personaje_mc._x, -2 + personaje_mc._y + personaje_mc._height / 2, true))
   {
      personaje_mc._y--;
   }
   while (suelo_mc.hitTest(personaje_mc._x, personaje_mc._y - personaje_mc._height / 2, true))
   {
      personaje_mc._y++;
      _root.personaje_mc.gotoAndStop("Salto");
   }
   while (suelo_mc.hitTest(personaje_mc._x + personaje_mc._width / 2, personaje_mc._y, true))
   {
      personaje_mc._x--;
   }
   while (suelo_mc.hitTest(personaje_mc._x - personaje_mc._width / 2, personaje_mc._y, true))
   {
      personaje_mc._x++;
   }
};


Pero queda rara la animacion que da el efecto de caminar

http://tenoch.mx/lupeTec.swf

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 06:16 pm
Muy bien. Ahora imagina que tienes estas variables

Código ActionScript :

var speedX:Number = 0;
var speedY:Number  = 0;


Y en el onEnterFrame puedes tener

Código ActionScript :

personaje_mc._y += speedY;
personaje_mc._x += speedX;


Asi cada tecla modifica solo un componente de la velocidad, es decir modiffica la variable que le compete. Esa es la idea general mas performante para manejo de personaje. Si hay saltos, usualmente se setea un flag y se pasa el personaje a una animación específica.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 May 2012 06:19 pm
Ok, postie al mismo tiempo que posteaste el ladrillo de código último, en donde veo que llamas a funciones específicas para cada cosa ... mira si puedes simplificar según la idea que te pasaba, Luego veo un montón de valores hardcoded en las funciones derecha e izquierda, en cuanto te pidan cambiar cualquier cosita te volverás loco buscando donde, simplifica

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 May 2012 06:46 pm
para simplificar com seria? y actua raro el salto

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 06:46 pm
Gracias por contestar

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 06:53 pm
Yo soy muy vago para escribir código, pero por ejemplo cuentame que hace esto

Código ActionScript :

if (_root.personaje_mc._x < (Stage.width) - 100)
   {
      _root.mc_l0._x = _root.mc_l0._x - 1;
      _root.mc_l1._x = _root.mc_l1._x - 1.6;
      _root.mc_l15._x = _root.mc_l15._x - 2;
      _root.mc_l17._x = _root.mc_l17._x - 2.5;
      _root.mc_l2._x = _root.mc_l2._x - 3;
      _root.suelo_mc._x = _root.mc_l2._x - 3;
      _root.mascara._x = _root.suelo_mc._x - 3;
      _root.mc_l3._x = _root.mc_l3._x - 5;
      _root.mc_l4._x = _root.mc_l4._x - 8;
   }


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 May 2012 07:02 pm
cada uno es un plano, hacen un efecto de parallax en referencia al personaje cuando se mueve de izquierda a derecha

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 07:06 pm
como le puedo hacer para que el listener detecte 2 presiones de tecla a la vez?

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 May 2012 07:17 pm
Mira si puedes mover la logica del desplazamiento y posicionamiento dentro de los MC del fondo (incluso si usaras otra clase para ello tanto mejor) en vez de tenerlos mezclado en la rutina de movimiento del personaje.
No puedes detectar dos teclas al mismo tiempo, lo que haces es tener flags que pones en true en el onPress y en false en el onRelease, luego miras los flags que te interesan para ver si se combinan (por ejemplo derecha y arriba en true)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 May 2012 03:48 pm
Ya simplifique el código y quedo así

Código :

listener = new Object();
listener.onKeyDown = function()
{
   if (Key.getCode() == Key.RIGHT)
   {
      _root.direccion.gotoAndStop("Camina");
      _root.direccion._xscale = 100;
      _global.vanR = true;
   }
   if (Key.getCode() == Key.LEFT)
   {
      _root.direccion.gotoAndStop("Camina");
      _root.direccion._xscale = -100;
      _global.vanL = true;
   }
   if (_global.vanS == false)
   {
      if (Key.getCode() == Key.UP)
      {
         _root.direccion.gotoAndStop("Salto");
         _global.vanU = true;
         _global.vanS = true;
         yVelPer = saltoPer;
         direccion._y += yVelPer;
      }
   }
   if (_global.vanSF == false)
   {
      if (_global.vanR == true && _global.vanU == true)
      {
         _root.direccion.gotoAndStop("SaltoFr");
         _root.direccion._xscale = 100;
      }
      if (_global.vanL == true && _global.vanU == true)
      {
         _root.direccion.gotoAndStop("SaltoFr");
         _root.direccion._xscale = -100;
      }
   }
};
listener.onKeyUp = function()
{
   if (Key.getCode() == Key.RIGHT)
   {
      _root.direccion.gotoAndStop("Normal");
      _root.direccion._xscale = 100;
      _global.vanR = false;
      _global.vanS = false;
      _global.vanSF = false;
   }
   if (Key.getCode() == Key.LEFT)
   {
      _root.direccion.gotoAndStop("Normal");
      _root.direccion._xscale = -100;
      _global.vanL = false;
      _global.vanS = false;
      _global.vanSF = false;
   }
   if (Key.getCode() == Key.UP)
   {
      _global.vanU = false;
      trace(_root.direccion._y)
   }
};
Key.addListener(listener);


use unos flags para controlar los estados del personaje
Y se ve así http://http://tenoch.mx/g.swf

Por alanc

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 May 2012 03:59 pm
Funciona, está mucho mejor, ahora vete agregando un fondo

Jorge

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.