Cerrar Bienvenido
Cerrar Registrate

Ya somos 1.511.233 Forros navegando...

1483 usuarios conectados | 1.511.233 forros | 370.670 temas | 4.393.343 mensajes | seremos forros, pero somos una bocha

Actionscript 2 en el foro de Programación:


Buenas a todos, les comento que estoy haciendo un juego y el flash me esta trayendo unos problemitas con las teclas.. El asunto es que si bien flash permite que 2 teclas sean presionadas a la vez, si suelto una tecla hay una pausa de aproximadamente un segundo hasta que las vuelve a detectar. Por ejemplo, si con una tecla acelero un auto y con otra disparo, supongamos que voy acelerando, al momento de disparar, el auto frenaria un segundo y luego aceleraria de nuevo (y el jugador nunca hubiera soltado la tecla de acelerar). Alguien conoce la solucion? Pueden ...

Datos del Tema
Creado el 02.07.09 a las 20:05
  • 0 Votos
  • 0
    Favoritos
  • 269
    Visitas
  • 6
    Mensajes
¡Tema agregado a Favoritos!
Ya tienes este tema en Favoritos
Error
¡Buen Tema!0 Votos Disponibles
¡Tu voto ha sido enviado!
Ya has votado por este tema
[Error]
No puedes votar tu propio tema
No puedes votar a usuarios baneados
No puedes votar en un tema cerrado
Viejo 02.07.09, 20:05
Buenas a todos, les comento que estoy haciendo un juego y el flash me esta trayendo unos problemitas con las teclas.. El asunto es que si bien flash permite que 2 teclas sean presionadas a la vez, si suelto una tecla hay una pausa de aproximadamente un segundo hasta que las vuelve a detectar.

Por ejemplo, si con una tecla acelero un auto y con otra disparo, supongamos que voy acelerando, al momento de disparar, el auto frenaria un segundo y luego aceleraria de nuevo (y el jugador nunca hubiera soltado la tecla de acelerar). Alguien conoce la solucion? Pueden probarlo con este codigo si quieren por si no fui claro, lo unico que tienen que hacer es crear dos movieclips con los nombres "object1" y "object2".

Código:
var _keyboardListener : Object;

_keyboardListener = new Object();
        _keyboardListener.onKeyDown = test;
        Key.addListener(_keyboardListener);
        
function test(){
    if (Key.isDown(Key.RIGHT)){
        object1._x++;
    }
    if (Key.isDown(Key.UP)){
        object2._x++;
    }
}
Muchas gracias!

Viejo 02.07.09, 22:17
Como aceleras? apretando repetidamente la misma tecla o manteniendola apretada? Tiene acelaración gradual o va de a saltos? Para mi que le estas errando en el evento. Igual, no se cual es el modelo de eventos de flash, pero casi seguro que por cada tecla presionada se disparan una serie de de eventos: key down , una o más key pressed (o algo similar; esto mientras lo mantiene presionado) y por último un key up. Los eventos que se repiten mientras mantener presionado es key pressed (no key down o key up; esos se disparan una sola vez). Es decir para manejar la acelaración usas el evento key pressed (y claro, en el "oyente" verificas que es la tecla de acelaración) y en el key down manejas los disparos (de nuevo, chequeando que sea la tecla de disparo la que se "bajo"; ok, estoy asumiento que en tu juego no seguis disparando repetidas veces cuando dejas apretado la tecla; si asi fuera deberias usar tambien el evento "key pressed").

Igual, aca debe haber gente que sepa un pco más que yo sobre este tema...
"It is better to be beatiful than to be good. But... it is better to be good than to be ugly." (Oscar Wilde) Era jodido Oscarcito...
"Why do programmers get Halloween and Christmas mixed up? Because OCT(31) = DEC(25)"
"De vez en cuando la vida toma conmigo ferne' ...." (el_bot)
AntiMW VBS Tools (saca los virus con notepad!!!)

Última edición por el_bot: 16 de agosto de 1981 a la tardecita. Razón: nací.
Viejo 02.07.09, 23:14
Avanza mientras tengas la tecla apretada, el evento esta bien, el tema es este, imaginate que tocas la tecla de acelerar Y NO LA SOLTAS. Bueno, sin soltarla disparas, y oops!, dispara pero se frena un toke, y recien ahi sigue, y vos nunca soltaste la tecla. Eso hace que la gente que probo el juego me tire feedback negativo sobre el movimiento porque dicen que "se traba", cosa que es cierta pero que no se resolverla, y hasta pienso que es una falla en el manejo de teclado que hace flash. Alguien tiene alguna pista?

Viejo 03.07.09, 10:57
En estos casos, lo recomendado no es usar el listener de esa manera, sino en conjunto con un enterframe...
El listener lo único que haría sería setear un booleano que te indique si la tecla está presionada o no, y a través de un enterframe manejas la acción, algo así:
Código:
var _keyboardListener : Object;
var keyUp:Boolean = false;
var keyDown:Boolean = false;
var keyLeft:Boolean = false;
var keyRight:Boolean = false;

_keyboardListener = new Object();
_keyboardListener.onKeyDown = keyDown;
_keyboardListener.onKeyUp= keyUp;
 Key.addListener(_keyboardListener);

function keyDown(){
  if (Key.getCode() == Key.UP){
    keyUp = true;
  }
  if (Key.getCode() == Key.DOWN){
    keyDown = true;
  }
  if (Key.getCode() == Key.LEFT){
    keyLeft = true;
  }
  if (Key.getCode() == Key.RIGHT){
    keyRight = true;
  }
}

function keyUp(){
  if (Key.getCode() == Key.UP){
    keyUp = false;
  }
  if (Key.getCode() == Key.DOWN){
    keyDown = false;
   }
   if (Key.getCode() == Key.LEFT){
    keyLeft = false;
   }
   if (Key.getCode() == Key.RIGHT){
    keyRight = false;
   }
 }

this.onEnterFrame = function()
{
  if(keyUp)
  {
    // Mover arriba
  }
  if(keyDown)
  {
    // Mover abajo
  }
  if(keyLeft)
  {
    // Mover izquierda
  }
  if(keyRight)
  {
    // Mover derecha
  }
}

Viejo 03.07.09, 12:08
MIL GRACIAS MAESTRO!!

no lo probe pero le tengo fe! lo pruebo y te cuento

Viejo 03.07.09, 18:38

Avisá cómo te fue!

Viejo 07.07.09, 12:51
Me salvaste la vida che, 1000 gracias!!


Herramientas Buscar en este tema
Buscar en este tema:

Búsqueda avanzada
Iniciar Sesion

Recordarme

Top de Temas

  • No hay temas votados

Top de Usuarios

  • No hay usuarios votados
ElServer