
Sprite
Sprites diferentemente de animações possuem métodos que podem fazer a imagem se locomover pela tela.
A classe Sprite extende a classe Animation, isso quer dizer que tudo que fizemos na parte de animação também pode ser aplicado aos Sprites.
1 - Criando um Sprite
A classe Sprite possui dois construtores:
//Basta passar o nome da imagem a ser exibida, o número de frames automaticamente será 1 public Sprite(String fileName); //É passado o nome da imagem que será exibida e o número de frames que ela contém. public Sprite(String fileName, int numFrames);
Exemplo: Criando um sprite
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Sprite001;
import JPlay.GameImage;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
//Creates a sprite.
public class Sprite001
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Window janela = new Window(800,600);
GameImage fundo = new GameImage("fundo.png");
Sprite inuyasha = new Sprite("inuyasha.png", 13);
inuyasha.y = 250;
inuyasha.x = 200;
inuyasha.setSequence(0, 2);
inuyasha.setTotalDuration(1200);
while(true)
{
fundo.draw();
inuyasha.draw();
janela.display();
inuyasha.
inuyasha.update();
}
}
}
2 - Movimentando um sprite - Somente pelo eixo X
Para começar vamos aprender como fazer a movimentação do sprite usando as coordenadas (x,y) e as teclas direcionais.
Para fazer o sprite se movimentar no eixo X temos que modificar o valor da variável x."
Exemplo:
a posição de um sprite no eixo x é 100 (sprite.x = 100)
para fazer o sprite se movimentar para o valor 99 devemos decrementar o valor de x: sprite.x--;
já para o valor movimentar o sprite para a posição 101 devemos incrementar o valor de x: sprite.x++;
O significado do -- e do ++ para a movimentação do sprite no eixo X:
'--' : faz o sprite se deslocar 1 pixel para a esquerda.
'++' : faz o sprite se deslocar 1 pixel para a direita.
O fato de o sprite se movimentar para a direita ou para a esquerda se relaciona ao modo de como o java manipula as coordenadas de tela.
Tomemos uma tela com 798 pixels de largura, no java a configuração da tela será a seguinte:
O canto esquerdo se inicia com o valor de coordenada 0 (x = 0).
O canto direito possui o valor 800 (x = 800).
![]()
Exemplo : Movendo um sprite pelo eixo X
package Sprite002;
import JPlay.Keyboard;
import JPlay.Sprite;
import JPlay.Window;
import java.awt.Color;
import java.awt.Event;
import java.awt.event.KeyEvent;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
public class Main
{
//Move the sprite by the x-axis
public static void main(String[] args)
{
Window janela = new Window(800,600);
Keyboard teclado = janela.getKeyboard();
teclado.addKey(KeyEvent.VK_N, Keyboard.DETECT_EVERY_PRESS);
Sprite sprite = new Sprite("boia.png");
sprite.y = 250;
sprite.x = 350;
boolean executando = true;
while(executando)
{
janela.clear(Color.black);
sprite.draw();
janela.display();
if(teclado.keyDown(Keyboard.LEFT_KEY))
sprite.x -= 3;
else
if( teclado.keyDown(Keyboard.RIGHT_KEY))
sprite.x += 3;
janela.delay(10);
if (teclado.keyDown(KeyEvent.VK_N) == true)
executando = false;
}
janela.exit();
}
}
3 - Movimentando um sprite - Somente pelo eixo Y
Para fazer o sprite se movimentar no eixo Y temos que modificar o valor da variável y.
(y = 0)
Exemplo:
A posição de um sprite no eixo y é 347 (sprite.y = 347).
Para fazer o sprite se movimentar para o valor 340 devemos decrementar o valor de y:
sprite.y -= 7 .
Já para o valor movimentar o sprite para a posição 154 devemos incrementar o valor de y:
sprite.y += 7;
O significado do '-7' e do '+7' para a movimentação do sprite no eixo Y:
'-7' : faz o sprite se deslocar 7 pixels para a cima.
'+7' : faz o sprite deslocar 7 pixels para baixo.
Tomemos uma tela com 325 pixels de largura, no java a configuração da tela será a seguinte:
O canto esquerdo se inicia com o valor de coordenada 0 (y = 0).
O canto direito possui o valor 355 (y = 355).
(y = 355)
Exemplo : Movendo um sprite pelo eixo Y.
package Sprite004;
import JPlay.GameImage;
import JPlay.Keyboard;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Universidade Federal Fluminense - UFF - Brasil - 2010
* Ciência da Computação
*/
public class Sprite004
{
//Movendo o sprite no eixo Y
public static void main(String[] args)
{
Window janela = new Window(800,600);
Keyboard keyboard = janela.getKeyboard();
GameImage backGround = new GameImage("mar.png");
Sprite sprite = new Sprite("boia.png");
sprite.y = 450;
sprite.x = 300;
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
if( keyboard.keyDown(Keyboard.UP_KEY) )
sprite.y -= 7;
else
if( keyboard.keyDown(Keyboard.DOWN_KEY) )
sprite.y += 7;
janela.delay(50);
}
}
}
4 - Movimentando um sprite pela tela dentro de uma área delimitada.
package Sprite006;
import JPlay.GameImage;
import JPlay.Keyboard;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Universidade Federal Fluminense - UFF - Brasil - 2010
* Ciência da Computação
*/
public class Sprite006
{
//Delimitando a área de movimento do sprite no eixo X e no eixo Y
public static void main(String[] args)
{
Window janela = new Window(800,600);
Keyboard keyboard = janela.getKeyboard();
GameImage backGround = new GameImage("mar.png");
Sprite sprite = new Sprite("boia.png");
sprite.y = 400;
sprite.x = 300;
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
//Move no eixo Y
if(keyboard.keyDown(Keyboard.UP_KEY) && sprite.y > 0)
sprite.y--;
else
if( keyboard.keyDown(Keyboard.DOWN_KEY)
&& sprite.y + sprite.height < janela.getHeight())
{
sprite.y++;
}
//Move no eixo X
if(keyboard.keyDown(Keyboard.LEFT_KEY) && sprite.x > 100)
sprite.x--;
else
if( keyboard.keyDown(Keyboard.RIGHT_KEY) && sprite.x + sprite.width < 650)
sprite.x++;
}
}
}
5 - Movimentando um sprite usando métodos da classe Sprite
Para a movimentação de um sprite os seguintes métodos podem ser usados:
//Move o Sprite na tela somente no eixo x, deve-se passar a velocidade de locomoção do sprite. public void moveX(double velocity); //Move o Sprite na tela somente no eixo y, deve-se passar a velocidade de locomoção do sprite. public void moveY(double velocity);
Exemplo: Movendo o Sprite no eixo X com velocidade 10 e no eixo Y com velocidade = 6.
package Sprite007;
import JPlay.GameImage;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Universidade Federal Fluminense - UFF - Brasil - 2010
* Ciência da Computação
*/
public class Sprite007
{
//Movendo um sprite usando os método moveY(double) e moveX(double)
public static void main(String[] args)
{
Window janela = new Window(800,600);
GameImage backGround = new GameImage("mar.png");
Sprite sprite = new Sprite("boia.png");
sprite.y = 400;
sprite.x = 300;
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
//Move no eixo Y
sprite.moveY(6);//velocidade = 6
//Move no eixo X
sprite.moveX(10);//velocidade = 10
}
}
}
Obs.: as teclas padrões para fazer o Sprite se movimentar são as setas direcionais.
Para fazer com que o Sprite use outras teclas para se movimentar use os seguintes métodos:
//passe os códigos das teclas a serem usadas para locomover o sprite para a esquerda ou para a direita. public void moveX(int leftKey, int rightKey); //Passe os códigos das teclas a serem usadas para locomover o sprite para cima ou para baixo. public void moveY(int upKey, int downKey);
Exemplo: Movendo o Sprite no eixo Y com velocidade 5 e usando as setas para direita e para esquerda.
package Sprite008;
import JPlay.GameImage;
import JPlay.Keyboard;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
public class Sprite008
{
//Moves the sprite by y-axis using direction buttons left and right.
public static void main(String[] args)
{
Window janela = new Window(800,600);
GameImage backGround = new GameImage("mar.png");
Sprite sprite = new Sprite("boia.png");
sprite.y = 400;
sprite.x = 300;
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
//Keyboard.LEFT_KEY moves up
//Keyboard.RIGHT_KEY moves down
sprite.moveY(Keyboard.LEFT_KEY, Keyboard.RIGHT_KEY, 1);//velocity = 1
}
}
}
Obs.: Todos os métodos apresentados não permitem que o sprite se locomova para fora da janela.
4 - Fazendo o Sprite pular
Antes de fazer o sprite pular, devemos informar o valor da coordenada Y que servirá como chão, para isso use o método abaixo:
public void setFloor(int floor);
Para fazer com que o sprite pule use o seguinte método:
//Esse método usa a tecla SPACE para fazer o sprite pular. public void jump();
Exemplo:
sprite.setFloor(500);
sprite.jump(); o sprite irá pular e ao cair não irá ultrapassar a coordenada y = 500;
Para controlar a velocidade e a altura do pulo use o método:
//Onde o parâmetro a ser passado é a velocidade inicial com que o sprite irá se deslocar do chão. public void setJumpVelocity(double velocity);
Para saber se o sprite ainda está executando o pulo use o método:
//Retorna true se o sprite não retornou ao chão, caso contrário, retorna false. public boolean isJumping();
Exemplo: Faz um sprite pular e seta o seu chão.
package Sprite009;
import JPlay.GameImage;
import JPlay.Keyboard;
import JPlay.Sprite;
import JPlay.Window;
import java.awt.event.KeyEvent;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
public class Sprite009
{
//Makes the sprite to jump.
public static void main(String[] args)
{
Window janela = new Window(800,600);
GameImage backGround = new GameImage("cena.png");
Sprite sprite = new Sprite("mario.png");
sprite.y = 440 - sprite.height;
sprite.x = 250;
sprite.setFloor(440);
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
sprite.jump();
janela.delay(10);
}
}
}
5 - Mudando a tecla usada no pulo
Por padrão a tecla a ser usada para fazer o boneco pular é a barra de espaço, caso você queira mudar essa tecla use o seguinte método:
//KeyCode é o código da tecla que servirá para acionar o pulo. public void jump(int keyCode);
Exemplo: Faz um sprite pular com a seta para cima e determina qual o seu chão
package Sprite010;
import JPlay.GameImage;
import JPlay.Keyboard;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
public class Sprite010
{
//Make the sprite jump with the directional arrow up and set up its floor.
public static void main(String[] args)
{
Window janela = new Window(800,600);
GameImage backGround = new GameImage("cena.png");
Sprite sprite = new Sprite("mario.png");
sprite.y = 440 - sprite.height;
sprite.x = 250;
sprite.setFloor(440);
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
sprite.jump(Keyboard.UP_KEY);
janela.delay(10);
}
}
}
9.6 - Simulando gravidade
Para simular o efeito de gravidade use o método:
public void fall();
Para saber se o sprite tocou o chão use o seguinte método:
//Retorna true se o chão já foi atingido pelo sprite, ao contrário, retorna false. public boolean isOnFloor();
Assim como no pulo, o valor da coordenada Y que servirá como chão deve ser setada antes de usar o método fall();
Para mudar o valor da gravidade use o método:
public void setGravity(double gravity).
Exemplo: Simulando o efeito de gravidade.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Sprite011;
import JPlay.GameImage;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
public class Sprite011
{
//Simulates the effect of gravity.
public static void main(String[] args)
{
Window janela = new Window(800,600);
GameImage backGround = new GameImage("cena.png");
Sprite sprite = new Sprite("mario.png");
sprite.y = 0;
sprite.x = 250;
sprite.setGravity(1);
sprite.setFloor(568);
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
sprite.fall();
janela.delay(10);
}
}
}
9.7 - Movendo o sprite de um ponto a outro.
Para mover o sprite de um ponto da tela até outro sem a intervenção do usuário use o método:
//Os valores passados como parâmetros são as coordenadas para onde se deseja que o sprite se desloque. public void moveTo(double x, double y);
Exemplo: Movendo um sprite de um ponto a outro.
package Sprite012;
import JPlay.GameImage;
import JPlay.Sprite;
import JPlay.Window;
/**
* @author Gefersom Cardoso Lima
* Federal Fluminense University
* Computer Science
*/
public class Sprite012
{
//Moves the sprite from one point to another.
public static void main(String[] args)
{
Window janela = new Window(800,565);
GameImage backGround = new GameImage("estrada.jpg");
Sprite sprite = new Sprite("bola.png");
sprite.y = 280;
sprite.x = 100;
backGround.draw();
sprite.draw();
janela.display();
janela.delay(2000);
while(true)
{
backGround.draw();
sprite.draw();
janela.display();
sprite.moveTo(490, sprite.y , 2);
if (sprite.x == 490)
sprite.moveTo(sprite.x, 35, 1);
janela.delay(4);
}
}
}
UFF - Universidade Federal Fluminense - Institudo de Computação - Ciência da Computação