1. class Personagem {
  2.   Body body;
  3.   float altura, largura;
  4.  
  5.   Personagem(float x, float y){
  6.     altura = 16;
  7.     largura = 16;
  8.    
  9.     BodyDef bd = new BodyDef(); //criando as caracteristicas de um corpo do nosso personagem
  10.     bd.type = BodyType.DYNAMIC; //Sera um corpo dinamico (com movimento)
  11.     bd.position.set(box2d.coordPixelsToWorld(x,y)); //essa sera a posicao do nosso corpo. Perceba que ha uma conversao do espaco fisico
  12.     // para o espaco "pixelar". Isso se deve ao padrao de cada lib. Na box 2d, centro do sistema cartesiano eh dado no centro da tela (x=0,y=0)
  13.     //ja no sistema grafico da processing eh dado no canto superior esquerdo.
  14.     body = box2d.createBody(bd); // atribuimos ao corpo do personagem, as definicoes do corpo criado.
  15.    
  16.     PolygonShape ps = new PolygonShape(); //criando as caractericas geometricas de um corpo
  17.     float box2dLargura = box2d.scalarPixelsToWorld(largura/2); //convertendo as dimensoes de pixels para "metro"
  18.     float box2dAltura = box2d.scalarPixelsToWorld(altura/2); //o mesmo que acima
  19.     //Porque dividido por 2? Simples, para o box2d as dimensoes dos objetos sao dadas do seu centro espacial ate a seu fim. Logo, seria
  20.     //a metade do que nos normalmente adotamos como largura e altura
  21.     ps.setAsBox(box2dLargura, box2dAltura); //setamos como um caixa com as dimensoes dadas entre parenteses
  22.    
  23.     FixtureDef fd = new FixtureDef(); //Entao, definimos o tipo de corpo, o tipo geometrico agora faltam as especificacoes fisicas deste.
  24.     //Nao encontrei uma traducao para fixture, mas creio que seriam como "propriedades" algo do tipo.
  25.     fd.shape = ps; //Informamos que o formato do corpo sera o formato ps criado. Isso porque, a box2d ira utilizar este para calular informacoes
  26.     //uteis como: Massa, centro de massa, momento angular e etc.
  27.     fd.density = 1; // definindo a densidade, veja, nao damos uma massa e sim a densidade, a massa sera calculada usando as dimensoes e densidade
  28.     fd.friction = 0.3; //coeficiente de atrito
  29.     fd.restitution = 0.5; //coeficiente de restituicao
  30.    
  31.     body.createFixture(fd); //agora passamos as qualidades "fixture" criada para o nosso corpo
  32.   }
  33.  
  34.     void display(){ //aqui sera a parte em que pegaremos os dados que a box2d nos da e desenharemos na tela
  35.     Vec2 pos = box2d.getBodyPixelCoord(body);  //o vetor posicao (Vec2 = vetor de duas dimensoes) sera dado pela conversao da posicao do corpo body para o sistema pixel
  36.     float angulo = body.getAngle(); //angulo do corpo
  37.    
  38.     pushMatrix();
  39.     translate(pos.x,pos.y); //imagem sera deslocada
  40.     rotate(-angulo); //rodaremos no angulo dado pela box2d
  41.     fill(127); //colorindo
  42.     stroke(0);//borda
  43.     strokeWeight(2);//espesura da borda
  44.     rectMode(CENTER);
  45.     rect(0,0,altura,largura);
  46.     popMatrix();
  47.     }
  48.    
  49.     void Walk(){
  50.       if(key == 'a'){
  51.         body.applyForce(new Vec2 (-50,0), body.getWorldCenter());
  52.       }
  53.       if(key == 'd'){
  54.         body.applyForce(new Vec2(50,0), body.getWorldCenter());
  55.       }
  56.       if(key == 's'){
  57.         body.applyForce(new Vec2(0,-50), body.getWorldCenter());
  58.       }
  59.       if(key == 'w'){
  60.         body.applyForce(new Vec2(0,50), body.getWorldCenter());
  61.       }
  62.     }  
  63. }