Tutorial FP 4 – Entrada de teclado e mouse
Autor: Luiz Eduardo da Silva | Publicado: 2011-11-25T08:30:00-08:00

Este tutorial explica como fazer os objetos de seu game responderem a entradas de teclado e mouse no FlashPunk. Estu tutorial espera que você tenha aprendido tudo que os tutoriais FP anteriores ensinaram.LEITURA SIMPLES DO TECLADO

O jeito mais simples e rapido de ler o teclado no FP é usar a função de leitura por estados da classe Input combinada com as constantes da classe Key.
Abaixo está um exemplo de uma Entity que le varias teclas quando elas sao pressionadas:


package
{
 import net.flashpunk.Entity;
 import net.flashpunk.utils.Input;
 import net.flashpunk.utils.Key;

 public class MyEntity extends Entity
 {
  public function MyEntity()
  {

  }

  override public function update():void
  {
   if (Input.check(Key.SPACE))
   {
    // A barra de espaço está pressionada.
   }

   if (Input.check(Key.RIGHT))
   {
    // A seta direita está pressionada.
   }

   if (Input.check(Key.G))
   {
    // A tecla G está pressionada.
   }
  }
 }
}

Por exemplo, se nós queremos mover com as teclas direcionais a nossa Entidade gráfica do tutorial anterior, nós podemos fazer o seguinte:


package
{
 import net.flashpunk.Entity;
 import net.flashpunk.utils.Input;
 import net.flashpunk.utils.Key;

 public class MyEntity extends Entity
 {
  public function MyEntity()
  {

  }

  override public function update():void
  {
   if (Input.check(Key.LEFT)) { x -= 5; }
   if (Input.check(Key.RIGHT)) { x += 5; }
   if (Input.check(Key.UP)) { y -= 5; }
   if (Input.check(Key.DOWN)) { y += 5; }
  }
 }
}

A função check() da classe Input irá retornan verdadeiro em todo frame que a tecla estiver pressionada.

 ESPECIFICANDO ESTADOS DE TECLAS

Algumas vezel você irá checar um estado mais especifico de uma tela, se ela foi pressionada, ou se ela acabou de se liberada. FP contêm funções simples para estes casos, e tem um uso bem similares:


package
{
 import net.flashpunk.Entity;
 import net.flashpunk.utils.Input;
 import net.flashpunk.utils.Key;

 public class MyEntity extends Entity
 {

  public function MyEntity()
  {

  }

  override public function update():void
  {
   if (Input.pressed(Key.SPACE))
   {
    // A barra de espaço foi pressionada NESTE frame.
   }
   if (Input.released(Key.SPACE))
   {
    // A barra de espaço foi liberada NESTE frame.
   }
  }
 }
}

A função pressed() irá retornar verdadeiro no frame em que a tecla for pressionada, o mesmo para release(), que irá retornar verdadeiro no frame que a tecla for liberada.
A cada frame o estado de cada tecla é atualizado, então quando uma tecla é pressionada, seu estado será "pressed" para o frame em que foi pressionado, e "held" para os proximos frames em que a tecla continua pressionada.

DEFININDO CONTROLES

As vezes é melhor ter controles mapeados para diferentes teclas, já que é trabalho disperdicado ter que repitir longos trechos de código para cada chave, FP deixa você definir e controlar os nomes támbem.
Por exemplo: Eu irei definir dois controles diferentes, "Shoot", para atirar, e "Jump", para pular, e atribuirei teclas para cada:


package
{
 import net.flashpunk.Entity;
 import net.flashpunk.utils.Input;
 import net.flashpunk.utils.Key;

 public class MyEntity extends Entity
 {
  public function MyEntity()
  {
   Input.define("Jump", Key.Z, Key.UP);
   Input.define("Shoot", Key.SPACE, Key.X, Key.C);
  }

  override public function update():void
  {
   if (Input.pressed("Jump"))
   {
    // Uma (ou varias) das teclas "Jump" foi pressionada neste frame.
   }
   if (Input.check("Shoot"))
   {
    // Uma (ou varias) das teclas "Shoot" está pressionada neste frame.
   }
  }
 }
}

As funções check(), pressed(), e released() aceitam teclas ou variaveis de controle como parametro, Então você pode usar variaveis de controle do mesmo jeito que usa variaveis de teclas individuais.

ESTADOS DO MOUSE

Similar a leitura de teclas, você pode checar o stado do mouse usando as funções providenciadas pela classe Input, assim:


package
{
 import net.flashpunk.Entity;
 import net.flashpunk.utils.Input;

 public class MyEntity extends Entity
 {
  public function MyEntity()
  {

  }

  override public function update():void
  {
   if (Input.mouseDown)
   {
    // O mouse está pressionado.
   }
   if (Input.mousePressed)
   {
    // O mouse foi pressionado neste frame.
   }
   if (Input.mouseReleased)
   {
    // O mouse foi liberado neste frame.
   }
  }
 }
}

E se você querer que sua entidade siga as coordenadas do mouse, você pode fazer isto:


package
{
 import net.flashpunk.Entity;
 import net.flashpunk.utils.Input;
 import net.flashpunk.FP;

 public class MyEntity extends Entity
 {
  public function MyEntity()
  {

  }

  override public function update():void
  {
   // Atribui a posição do mouse para a entidade(relativo a Camera).
   x =Input.mouseX;
   y =Input.mouseY;
   // Atribui a posição do mouse para a entidade(relativo ao World).
   x =FP.world.mouseX;
   y =FP.world.mouseY;
  }
 }
}

Fonte : FlashPunk

Créditos : ChevyRay