segunda-feira, 17 de outubro de 2016

Atividade 11 - Sprites Mário, corrigir problemas de controle.

Mantendo o frame-rate a 60 fps,  explicar o problema e mostrar uma solução para a questão do controle do personagem

Primeiramente foi preciso criar novos estados, é preciso ter dois tipos de andando (esquerda e direita) e também dois tipos de parado (para cada um dos lados) e acertar de que toda vez que o personagem vá virar para o outro lado primeiro apareça o parado para local que irá ir e só depois dos sprites de enfim andando. Para isso foi criados IF's, que estavam dentro do draw mas como ficaram vários resolvi organizar dentro da função move() e chamá-la no draw.

Para garantir que o frameRate funcione, precisamos criar outra variável para armazenamento que possa ser inicializada, para evitar problemas do personagem avançar espaço mas não mudar de imagem!


final int PARADO=0;
final int PARADO2=1;
final int ANDANDO=2;
final int ANDANDO2=3;
final int FORATELAESQ=4;
final int FORATELADIR=5;

int valorframerate=0;
int posicaoMario=250;

PImage imgParado, imgAndando, imgParado2, imgAndando2;
int estadoMario=PARADO;

void setup ()
{
size(800,600);
frameRate(60);

imgParado=loadImage("marioparado.png"); //esq
imgAndando=loadImage("marioandando.png"); //esq
imgParado2=loadImage("marioparado2.png"); //dir
imgAndando2=loadImage("marioandando2.png"); //dir

}

void draw ()
{
   background(255);
     move ();
    mostraMario(estadoMario);

}

void move()
{
if((keyPressed==true)&&(keyCode==LEFT)&&(estadoMario==PARADO)){
  estadoMario=ANDANDO;
  }
  if((keyPressed==true)&&(keyCode==RIGHT)&&(estadoMario==PARADO2)){
  estadoMario=ANDANDO2;
  }
  if((keyPressed==true)&&(keyCode==LEFT)&&(estadoMario==PARADO2)){
  estadoMario=PARADO;
  }
  if((keyPressed==true)&&(keyCode==RIGHT)&&(estadoMario==PARADO)){
  estadoMario=PARADO2;
  }
  if ((posicaoMario==0-30)&&(keyPressed==true)&&(keyCode==LEFT)){
  estadoMario=FORATELAESQ;
  }
  if ((posicaoMario==800-30)&&(keyPressed==true)&&(keyCode==RIGHT))
  {
  estadoMario=FORATELADIR;
  }
}

void mostraMario(int estado)
{
switch(estado) {
  case PARADO:
  image(imgParado,posicaoMario,150);
  break;
  
  case PARADO2:
  image(imgParado2,posicaoMario,150);
  break;
  
  case ANDANDO:
  incrementa();
  if (valorframerate%30<15) {
  image(imgAndando,posicaoMario,155);
  } 
  else
  {
  image(imgParado,posicaoMario,150);
  posicaoMario-=5;
  estadoMario=PARADO;
  }
  break;
  
  case ANDANDO2:
  incrementa();
  if (valorframerate%30<15)
  {
  image(imgAndando2,posicaoMario,155);
  }
  else
  {
  image(imgParado2,posicaoMario,150);
  posicaoMario+=5;
  estadoMario=PARADO2;
  }
  break;
  
  case FORATELAESQ:
  incrementa();
  if(valorframerate%30<15)
  image(imgAndando,posicaoMario,155);
  else
  image(imgParado,posicaoMario,150);
  estadoMario=PARADO;
  break;
  
  case FORATELADIR:
  incrementa();
  if(valorframerate%30<15)
  image(imgAndando2,posicaoMario,155);
  else
  image(imgParado2,posicaoMario,150);
  estadoMario=PARADO2;
  break;
}

}

void incrementa() {
  if(valorframerate < 60) {
    valorframerate++;
  } else {
    valorframerate = 0;
  }
}

void keyReleased() {
  valorframerate= 0;
}



Comentários
0 Comentários

Nenhum comentário:

Postar um comentário

recent posts