Você está na página 1de 91

Luciano Alves da Silva

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Luciano Alves da Silva

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Desenvolvendo Jogos 2D com Plataforma

Guia para Desenvolvedores


[VERSO DE AMOSTRA]
Autor: Luciano Alves da Silva

Rio de Janeiro Outubro/2014

Copyright 2014 Todos os direitos reservados


4

Luciano Alves da Silva

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Aviso importante
Esta obra UMA VERSO DE AMOSTRA, ou seja, UMA
VERSO LIMITADA E LIVRE da verso COMPLETA.
Essa obra , PODER SER DISTRIBUDA LIVREMENTE ,
MEDIANTE AS SEGUINTES REGRAS ABAIXO:
Esse material NO PODER SER COMERCIALIZADO
Essa material NO PODER SER DEVIRADO
E todos os crditos do autor DEVERO SER MANTIDOS

Download dos arquivos


Para realizar o download dos arquivos e imagens utilizados
nesta obra, clique no link abaixo:

Link dos materiais


http://goo.gl/uuSD60

Luciano Alves da Silva

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Sobre o autor da obra


Luciano Alves da Silva (lucianopascal@yahoo.com.br)
Bacharelado em Cincia da Computao pela UNISUAM e
Ps-Graduado em Docncia do Ensino Superior pelo
Instituto A Vez do Mestre (Universidade Cndido Mendes UCAM). Possui conhecimento e domnio das linguagens de
programao Pascal, Java, C/C++, C#, Visual Basic, Delphi,
PHP e HTML. J criou Ambientes de Desenvolvimento
Integrado (conhecidos como IDE) como o MakeWare (que
trabalha com as linguagens Pascal, C++ e Java) e o AlgoWare
(interpretador de algoritmos).
autor tambm dos seguintes livros, pela editora AGBOOK

Aprenda Passo a Passo a Programar em Android


Guia Essencial para Desenvolvedores

Desenvolvendo Jogos com a Plataforma XNA Guia


para Desenvolvedores (2 Edio)

Desenvolvendo Jogos com a Ferramenta RPG Maker


VX Guia do Usurio

Desenvolvendo Jogos com o Framework MONOGAME


Guia para Desenvolvedores

Luciano Alves da Silva

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

10

Luciano Alves da Silva

Apresentao
O mercado de desenvolvimento de jogos tem crescido
bastante nesses ltimos tempos. Hoje encontramos jogos
para as mais diversas plataformas (como PC, Web e Mobile).
Atualmente

o mercado de desenvolvimento de jogos para

PC tem ganhado bastante destaque, e hoje temos vrias


ferramentas (como frameworks) voltados para a criao de
jogos

destinados

plataforma

PC,

uma

dessas

ferramentas e o framework GameUtil2D (que eu mesmo


desenvolvi), que nada mais do que um conjunto de classes
e recursos destinadas criao de jogos ,voltado para as
mais diversas plataformas. E uma dessas plataformas o
Java.
Neste livro voc aprender nossos bsicas de como criar
jogos utilizando o framework GameUtil2D com linguagem
Java (usando a ferramenta Eclipse Luna) , atravs dos seus
recursos disponveis e tambm atravs dos exemplos
mostrados aqui nesta obra.
Para uma abordagem MAIS COMPLETA, adquira a VERSO
COMPLETA

do

livro

no

site

da

editora

AGBOOK

(http://www.agbook.com.br).

11

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

12

Luciano Alves da Silva

ndice analtico

Capitulo 1 Fundamentos bsicos sobre jogos ................ 15


1.1) O que um jogo de computador ? ............................ 15
1.2) Regras para a criao de um jogo de computador . 16
1.3) Sobre a ferramenta de desenvolvimento ................ 18
1.4) Sobre a linguagem de programao Java ................. 18
Capitulo

Instalando

as

ferramentas

de

desenvolvimento ................................................................ 19
2.1) A plataforma Java ....................................................... 19
2.2) A ferramenta Eclipse Luna ......................................... 24
2.3) A biblioteca GameUtil2D ........................................... 31
Capitulo 3 Criando nosso primeiro projeto .................... 32
O diretrio src (source) ................................................... 39
O diretrio drawables..................................................... 46

13

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
O diretrio sounds .......................................................... 47
Executando o jogo .............................................................. 49
Capitulo 4 Visualizando imagens no jogo ....................... 52
4.1) Criando nosso projeto ................................................ 52
Capitulo 5 Movendo elementos do jogo pela tela ......... 62
Capitulo 6 Trabalhando com animao de sprites........ 75
Capitulo 7 Detectando colises entre objetos no jogo . 85
Consideraes Finais.......................................................... 91

14

Luciano Alves da Silva

Capitulo 1 Fundamentos
bsicos sobre jogos

ntes

de

comearmos

estudar

utilizar

ferramenta Eclipse com a biblioteca GameUtil2D,


vamos entender melhor os fundamentos sobre jogos

de computador.

1.1) O que um jogo de computador ?


Um jogo de computador (assim como um software que
utilizamos no dia a dia), um programa voltado e destinado
somente ao entretenimento e diverso.
Praticamente, por parte de muitos usurios, os jogos fazem
parte do cotidiano (mesmo para aqueles que no so
desenvolvedores). Quem

nunca

se

divertiu (em

seu

momento de intervalo) com algum jogo de computador, por


mais simples que seja (como um jogo de campo minado, um
jogo de cartas, um jogo de plataforma como Mario Bros e
etc.).

15

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
1.2) Regras para a criao de um jogo de computador
Para desenvolvermos um jogo, naturalmente, precisamos
ter algumas coisas em mente : seu inicio, meio e fim
(histria do jogo de modo geral, no importando seu
gnero) ; as ferramentas que vamos utilizar para
desenvolver os jogos e programadores/artistas que estaro
envolvidos no projeto do jogo.
Vejamos abaixo algumas imagens de alguns ttulos de jogos
bastante conhecidos :

Jetpack joyride

16

Luciano Alves da Silva

Swing Copters

Angry Birds Rio

17

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
1.3) Sobre a ferramenta de desenvolvimento
Conforme foi abordado no tpico 1.2 deste captulo, um dos
critrios para a construo de jogos a ferramenta de
desenvolvimento escolhida, que neste caso, ser

ferramenta Eclipse Luna.


O Eclipse uma das mais famosas ferramentas para o
desenvolvimento de aplicativos para a plataforma Java
(como tambm para outras linguagens como C/C++ e PHP
por exemplo).
1.4) Sobre a linguagem de programao Java
A linguagem de programao Java a linguagem que iremos
utilizar para o desenvolvimento de jogos no GameUtil2D
(juntamente com o Eclipse Luna). Caso voc , que esteja
lendo este livro, no tenha nenhum conhecimento de
linguagem de programao e/ou algoritmos, recomendo
fortemente o estudo sobre o assunto.

18

Luciano Alves da Silva

Capitulo 2 Instalando as
ferramentas
de
desenvolvimento

este captulo iremos aprender passo a passo a


instalar a ferramenta de desenvolvimento Eclipse
Luna e o framework (biblioteca) GameUtil2D.

2.1) A plataforma Java


Neste tpico iremos realizar o download da mquina virtual
Java,

para

que

possamos

executar

os nosso

jogos

desenvolvidos no Eclipse Luna.


Minha mquina virtual java est instalada ?
Bom, para voc saber se voc possui uma mquina virtual
Java instalada, abra o prompt de comando e digite o
seguinte comando:
java version

19

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Verifique se o resultado foi similar ao que mostrado


abaixo:

Mquina virtual java instalada


Se observarmos as informaes mostradas no console
acima, certifique se a verso 1.7.x.x est instalada em sua
mquina, conforme destacado abaixo:

20

Luciano Alves da Silva

A verso do Java que utilizo para o desenvolvimento do livro


1.7 (Java 7). Se a verso que se encontra instalada em sua
mquina inferior ao utilizado no livro (como 1.6 ou 1.5),
recomendo a atualizao da mquina virtual (que ser
mostrado como instalar daqui a pouco).
Agora, se a verso que encontra instalada em sua mquina
for igual ou superior ao utilizado no livro, PODE PULAR EST
ETAPA e AVANCE PARA O PRXIMO TPICO.
Agora se o resultado ao digitar o comando java version no
prompt do comando for igual ao da figura seguinte :

Mquina virtual Java NO INSTALADA

21

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
Significa que sua mquina virtual , possivelmente, no est
instalada em sua mquina.
Para realizarmos o download o Java, visite o seguinte link
abaixo:
http://www.oracle.com/technetwork/java/javase/downloads/
jdk7-downloads-1880260.html?ssSourceSiteId=otnpt
Feito isso dever se abrir a seguinte pgina abaixo:

Pgina de download do Java 7

22

Luciano Alves da Silva


Procure pela verso mais recente do Java 7. Feito isso aceite
os termos de contrato e realize o download do arquivo de
instalao, conforme mostrado abaixo:

Aceitando os termos de contrato e realizando o


download
Feito isso dever ser mostrado a seguinte caixa de dilogo :

23

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Caixa de dilogo - Download


Aps realizar o download, siga todo o passo a passo da
instalao da mquina virtual Java.
2.2) A ferramenta Eclipse Luna
Conforme j foi mencionado no captulo anterior, iremos
utilizar a ferramenta Eclipse Luna para o desenvolvimento
de jogos com o GameUtil2D.
OBSERVAES SOBRE O ECLIPSE
Neste livro utilizo a verso 4.4 do Eclipse (conhecido como
Eclipse Luna). Caso voc esteja utilizando uma das verses
anteriores como Eclipse Kepler (4.3) ou Eclipse Juno (4.2),
no tem problema. Ser possvel tambm a utilizao do
framework GameUtil2D com uma dessas verses.

24

Luciano Alves da Silva


Com a mquina virtual Java instalada em seu computador,
vamos realizar o download da ferramenta Eclipse Luna, no
seguinte link abaixo.
https://www.eclipse.org/downloads/
Feito isso, ir se abrir a seguinte pgina abaixo:

Pgina de download do Eclipse aberto

Iremos realizar o download do Eclipse IDE for Java


Developers,

bastanto

escolher

uma

das opes

do

Windows ao lado (estarei utilizando aqui a verso de 32 bits

25

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
do Windows. Se por acaso voc realizou o download do Java
de 64 bits, baixe a verso do Eclipse de 64 bits).
Feito isso ir se abrir a seguinte pgina abaixo:

Realizando o download do Eclipse Luna

Agora basta clicar na opo de download informado na


pgina. Feito isso, ir se abrir a seguinte caixa de dilogo:

26

Luciano Alves da Silva

Caixa de dilogo - Download


Efetue o seu download e em seguida, descompacte o
arquivo

de instalao

em

um

local apropriado

(de

preferncia, no drive C:\).


Aps descompactar o arquivo, vamos executar o Eclipse,
conforme podemos ver na figura seguinte:

27

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Tela de abertura do Eclipse Luna


Em seguida ir se abrir a seguinte caixa de dilogo:

Caixa de dilogo Workspace Launcher

28

Luciano Alves da Silva


O que o Workpace ?
O Workspace nada mais do que um diretrio que
escolhemos para administrar todos os nossos projetos que
iremos desenvolver no Eclipse.
Escolha o seu diretrio de preferncia e em seguida, clique
em OK. Feito isso ir se abrir (depois das configuraes
que ocorrer durante a escolha do diretrio) a seguinte tela
abaixo:

Ambiente de programao Eclipse Luna

29

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Agora vamos fechar a guia Welcome para encerrarmos a


tela de apresentao . Feito isso veremos a seguinte tela
abaixo:

Ambiente de programao Eclipse Luna

30

Luciano Alves da Silva


2.3) A biblioteca GameUtil2D
Nesta obra , irei utilizar para o desenvolvimento de nossos
jogos uma biblioteca (dentro dos nossos projetos no Eclipse
Luna) que eu mesmo desenvolvi chamado GameUtil2D.
Para que serve esta biblioteca ?
Essa biblioteca nada mais do que um conjunto de classes
que facilitam a construo de jogos no JAVA. Ela j possui
uma srie de recursos que facilitam a construo de jogos
de forma fcil e rpida (inclui classes para animao de
sprites, colises, criao de personagens para jogos
plataforma e etc.) . Esse framework (que j acompanha este
material) pode ser encontrado em seu site oficial :
www.gameutil2d.org

31

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Capitulo 3 Criando nosso


primeiro projeto

este captulo iremos criar o nosso primeiro projeto


de jogo atravs do Eclipse Luna , usando a
biblioteca GameUtil2D.

Depois de tudo instalado, vamos executar o Eclipse Luna


(caso no esteja aberto). Em seguida, vamos importar o
nosso projeto do GameUtil2D para dentro do Eclipse, indo
no menu File e em seguida Import. Feito isso ser aberta
a seguinte caixa de dilogo abaixo:

32

Luciano Alves da Silva

Caixa de dilogo Import


Para importarmos um projeto j existente, expanda o
diretrio General e em seguida selecione Existing Projects
into Workspace. Veja na figura seguinte :

33

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Selecionando a opo
Feito isso clique no boto Next, que ser aberta a seguinte
tela :

34

Luciano Alves da Silva

Caixa de dilogo Import


Agora vamos clicar na opo Select archive file e em
seguida, clique no boto Browse, para selecionarmos a
nossa biblioteca, que acompanha este material (o arquivo

35

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
GameUtil2D_Java1.x.zip, que se encontra dentro da pasta
GameUtil2D). Feito isso, ir ser exibida a seguinte tela
abaixo:

Arquivo selecionado

36

Luciano Alves da Silva


Feito isso vamos clicar em Finish para adicionarmos a
nossa biblioteca (projeto) dentro do Eclipse. O resultado
voc confere em seguida:

Biblioteca adicionada ao projeto


Conhecendo a estrutura geral do projeto em GameUtil2D
Conforme havia falado, iremos utilizar o GameUtil2D (que
foi o

arquivo

que acabamos

de

importar) para o

desenvolvimento de nossos jogos. Vamos conhecer abaixo


toda a estrutura (de arquivos e pastas) que compem este
projeto.
Se visualizarmos o lado esquerdo, existe uma seo
chamada Package Explorer, onde nela existe uma pasta

37

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
chamada GameUtil2D_Java1.x (que o nosso projeto),
constitudo por vrios subdiretrios , que por sua vez,
possui seus respectivos arquivos. Se expandirmos a pasta
do projeto veremos uma estrutura de diretrios e pacotes,
conforme demonstra a figura seguinte:

Estrutura de diretrios

38

Luciano Alves da Silva


Irei comentar agora toda a estrutura de um projeto do
GameUtil2D. Ele composto por vrias pastas e arquivos,
cada um com uma finalidade em especifico.
O diretrio src (source)
Vamos comear conhecendo primeiramente o diretrio src
(source). Dentro desse diretrio temos todos os arquivos de
extenso .java que fazem parte de uma aplicao Java. Se
ns expandirmos essa pasta encontraremos uma srie de
arquivos, todos eles organizaes em seus respectivos
pacotes.
Irei descrever agora os pacotes dentro do nosso projeto, so
eles :
O pacote gameutil2d.project
Esse pacote constitudo por um arquivo principal, que ser
a classe que iremos trabalhar daqui por diante:
GameMain.java : Esse o arquivo principal do projeto,
nele que entramos com o cdigo do jogo.

Conforme vimos acima, o arquivo no qual iremos mexer


para escrever nossos jogos o arquivo GameMain.java. Se

39

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
clicarmos duas vezes no arquivo, veremos o seguinte
contedo:
package gameutil2d.project;
import
import
import
import
import
import

gameutil2d.classes.input.*;
gameutil2d.classes.basic.*;
gameutil2d.classes.scene.*;
gameutil2d.classes.text.*;
gameutil2d.classes.character.*;
gameutil2d.classes.media.*;

import java.awt.Graphics;
public class GameMain

public GameMain()
{
}
public void Update(KeyboardState keyboardState,
MouseState mouseState)
{
}
public void Draw(Graphics graphics)
{
}
}

40

Luciano Alves da Silva


O cdigo acima a estrutura padro da classe GameMain
(arquivo GameMain.java) no qual iremos escrever o cdigo
para o desenvolvimento do nosso jogo. Essa classe
constituda pelos seguintes mtodos:
GameMain: Esse o mtodo construtor, executado toda
vez que o jogo carregado. So neles que carregamos todos
os objetos e iniciamos as variveis que sero utilizadas no
jogo. Veja sua sintaxe:
public GameMain()

Update: Esse mtodo processado sempre durante a


execuo do jogo, e tambm o primeiro a ser executado.
Ele responsvel por executar a lgica de processamento
do jogo (movimento, aes e etc.). Vejamos a sua sintaxe:
public
void
Update(KeyboardState
MouseState mouseState)

keyboardState,

Nesse mtodo Update existem dois parmetros : um


responsvel pelo armazenamento do status do teclado e
outro responsvel pelo armazenamento do status do
mouse.

41

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
Draw: Esse mtodo processado sempre com a execuo
do jogo, e executado alternadamente com o mtodo
Update. Ele responsvel por desenhar a tela do jogo.
Vejas a sua sintaxe:
protected void Draw(Graphics graphics)

Esse mtodo possui um parmetro chamado graphics, que


representa a tela do jogo, no qual vamos utilizar para
desenhar os elementos na tela.
O pacote gameutil2d.classes.basic

Nesse pacote esto contidos as classes bsicas que iremos


utilizar para a construo dos nossos jogos. Vejamos abaixo
quais so essas classes e a finalidade de cada uma (que ser
demonstrada nos captulos posteriores) :

Image.java : Esse arquivo (ou classe) utilizado


quando queremos exibir uma imagem na tela em um
jogo.

42

Luciano Alves da Silva


AnimationSprites.java: Esse arquivo (ou classe)
utilizado para realizar animaes de sprites em um
jogo.
Collision.java : Esse arquivo (ou classe) utilizado
para detectar colises entre dois elementos em um
jogo.
FlipEffect.java : Classe utilizada para inverter uma
imagem (ou um conjunto de imagens de uma
animao de sprites) na horizontal.
GameElement.java: Essa a base utilizada para a
construo da maioria das classes citadas acima (e de
algumas outras classes que sero citadas em seguida),
e de bastante utilidade para a construo de outros
elementos do jogo por parte do usurio.
Box.java : Classe utilizada somente para definir
pontos de coliso, bastante til para a construo de
jogos baseados em plataforma (muito utilizada em
conjunto com as classe Character e Scene).

43

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
O pacote gameutil2d.classes.character
Nesse pacote existe somente uma classe, destinada para a
criao de personagens (para jogos no estilo plataforma).
Character.java : Esse arquivo (ou classe) utilizado
para a construo de personagens, que iremos utilizar
em um jogo.
O pacote gameutil2d.classes.scene
Nesse pacote existe somente uma classe, destinada para a
criao de cenrios do jogo.
Scene.java : Esse arquivo (ou classe) utilizado para
representar uma cena do jogo, e quais elementos
estaro presentes nele.
O pacote gameutil2d.classes.text
Nesse pacote existe somente uma classe, destinada para a
exibio de informaes na tela do jogo.

44

Luciano Alves da Silva


TextDrawable.java : Esse arquivo (ou classe)
utilizado para exibir informaes na tela do jogo
(mensagens, textos etc.).

O pacote gameutil2d.classes.input
Nesse pacote encontramos as classes responsveis pela
entrada de dados, so elas :
KeyboardState.java : Esse arquivo (ou classe)
utilizado para guardar o status do teclado, ou seja,
quais teclas foram pressionadas e/ou liberadas.
MouseState.java : Esse arquivo (ou classe) utilizado
para guardar o status do mouse, ou seja, qual posio
onde ele se encontra na tela (cursor), se o boto foi
pressionado e/ou liberado e etc.
Keys.java : Esse arquivo (ou classe) guarda todas as
constantes das teclas pressionadas e/ou liberadas, e
utilizado como parmetro nos mtodos IsKeyDown e
IsKeyUp da classe KeyboardState.

45

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

O pacote gameutil2d.classes.media
Nesse

pacote

existe

algumas

classes

destinadas

ao

tratamento de udio , so elas :


Song.java : Esse arquivo (ou classe) utilizado para
guardar e armazenar uma msica (em mp3) que
ser reproduzida no jogo (pela classe MediaPlayer).
MediaPlayer.java : Essse arquivo (ou classe)
responsvel por reproduzir as msicas do jogo
(armazenadas dentro da classe Song)
SoundEffect.java : Esse arquivo (ou classe)
utilizado para armazenar e reproduzir um som de
efeito (em wav) no jogo.
O diretrio drawables
Dentro da estrutura do projeto GameUtil2D existe um
diretrio chamado drawables, onde dentro dele colocamos
todas as imagens que iremos utilizar no jogo (no momento
somente imagens do tipo png e jpeg).

46

Luciano Alves da Silva


O diretrio sounds
Dentro da estrutura do projeto GameUtil2D existe um
diretrio chamado sounds, onde dentro dele colocamos
todos os arquivos de udio (de extenso .mp3 e .wav)
que utilizaremos no jogo.

Definindo o nome do projeto

Como voc percebeu, o nome do nosso projeto no Eclipse


Luna se chama GameUtil2D_Java1.x, mas, se eu quiser um
outro nome para esse projeto (como por exemplo Meu
Primeiro Jogo), visto que todos os nossos projetos que
iremos criar ser a partir deste modelo ? Para darmos um
novo nome para o projeto, basta selecion-lo e em seguida
pressionar a tecla F2, para renomear o projeto com um
novo nome, conforme voc pode conferir na figura seguinte:

47

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Caixa de dilogo Rename Java Project


Depois de escrever o novo nome do projeto basta clicar em
OK para que o projeto seja renomeado. Confira o
resultado na figura seguinte:

Projeto renomeado

48

Luciano Alves da Silva


Executando o jogo

Para executarmos o nosso jogo feito no Java, basta


clicarmos no boto

localizado na barra de ferramentas.

Veja na figura seguinte :

Boto Run As

Feito isso ser aberta a seguinte caixa de dilogo:

49

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Caixa de dilogo Run As


Selecione agora a opo Java Application e em seguida,
clique em OK. Vejamos o resultado na figura seguinte :

50

Luciano Alves da Silva

Aplicao em execuo
A tela escura indica que no h nada na tela, que nenhum
elemento est presente no jogo.
Neste

captulo

conhecemos

nosso

framework

de

desenvolvimento, que iremos utilizar para a construo dos


nossos jogos (o GameUtil2D). Nos prximos captulos vamos
conhecer todas as classes que compem esta framework e
como criar vrios exemplos de jogos (e tambm jogos)
atravs dela.

51

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Capitulo 4
Visualizando
imagens no jogo

o captulo anterior aprendemos a criar e a executar


um projeto (vazio) do GameUtil2D no Java. Agora
vamos comear a colocar a MO NA MASSA. Nesse

captulo iremos aprender como visualizar uma imagem na


tela (j utilizando a biblioteca GameUtil2D).
4.1) Criando nosso projeto
Conforme j foi mostrado, vamos importar o arquivo
GameUtil2D_Java1.x.zip para dentro do Eclipse Luna, para
criarmos um novo projeto. Feito isso, renomeie o projeto
com o nome de Visualizando Imagens.
Depois disso abra a pasta Capitulo 4 (que acompanha este
material) e em seguida copie (CTRL + C) todas as imagens
presentes deste diretrio para dentro do pasta drawables
do nosso projeto (CTRL + V). Vejamos o resultado :

52

Luciano Alves da Silva

Imagens copiadas para dentro do projeto


Para visualizarmos uma imagem no jogo, precisamos fazer
uso da classe Image , responsvel por essa finalidade. Para
isso, dentro da classe GameMain

vamos declarar um

atributo do tipo Image.

Na classe GameMain, na seo de declarao de atributos,


vamos declarar um atributo chamado imagem , conforme
podemos conferir em seguida:

53

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Image imagem;

Agora

dentro

do

construtor

da

classe

(o

mtodo

GameMain), vamos carregar o nosso atributo (objeto), com


os seguintes parmetros conforme voc confere no cdigo
abaixo:
public GameMain()
{
imagem = new Image("personagem_swing_copters", 0,
0, 80, 80);
}

Vamos analisar os parmetros do comando inserido acima.


O construtor da classe Image possui

os seguintes

parmetros :
imagem = new Image("personagem_swing_copters", 0,
0, 80, 80);

O primeiro parmetro do construtor corresponde a imagem


que vamos visualizar no jogo (que a imagem
personagem_swing_copters.png). Observe que quando
informamos o nome da imagem NO INFORMAMOS A SUA
EXTENSO (e tambm NO PRECISO), pois o GameUtil2D
j reconhece a imagem presente dentro do projeto.

54

Luciano Alves da Silva


O segundo e terceiro parmetro do construtor
correspondem , respectivamente, as coordenadas X e Y do
objeto na tela do jogo (cujos valores so 0 e 0). J o
quarto e o quinto
parmetro correspondem,
respectivamente, a largura e a altura do objeto (cujo valores
so 80 e 80).
Bom, o que fizemos at agora foi carregar o objeto (imagem)
na memria. Agora precisamos desenhar a imagem
carregada na tela. Para isso devemos utilizar o mtodo
Draw, responsvel por essa finalidade. Dentro do mtodo
Draw vamos escrever o seguinte cdigo destacado em
seguida:
public void Draw(Graphics graphics)
{
imagem.Draw(graphics);
}

O mtodo Draw do objeto imagem responsvel por


visualizar a imagem na tela , passando como argumento
para o mtodo um objeto do tipo Graphics (que nesse caso,
a varivel graphics).

Agora compile e execute novamente o projeto e confira o


resultado, conforme demonstra a figura seguinte:

55

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Imagem sendo visualizada no jogo

E ai, aprendeu como visualizar uma imagem na tela do


jogo ? Com certeza que sim!
Vamos aproveitar esse mesmo projeto para demonstrar
mais um exemplo de visualizao de imagens.
Vamos voltar para o cdigo de declarao de atributos para
digitarmos o seguinte trecho de cdigo destacado em
seguida em negrito:

56

Luciano Alves da Silva


public class GameMain

Image imagem;
Image titulo_swing_copters;
Image fundo_tela_swing_copters;
:

Agora dentro do mtodo GameMain VAMOS SUBSTITUIR o


cdigo em negrito abaixo :
public GameMain() {
imagem = new Image("personagem_swing_copters", 0,
0, 80, 80);
}

Pelo seguinte cdigo em negrito:


public GameMain() {
titulo_swing_copters = new
Image("titulo_swing_copters", (800 / 2) - (372/2),
30 , 372, 223);
fundo_tela_swing_copters = new
Image("fundo_tela_swing_copters", 0, 0, 800, 480);
imagem = new Image("personagem_swing_copters", 400
- 50, 320, 100, 100);
}

Agora dentro do mtodo Draw vamos digitar o seguinte


cdigo, conforme mostrado em seguida:

57

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
public void Draw(Graphics graphics)
{
fundo_tela_swing_copters.Draw(graphics);
titulo_swing_copters.Draw(graphics);
imagem.Draw(graphics);
}

Dentro do mtodo Draw existem trs instrues onde cada


uma ir exibir uma imagem na tela. As instrues que
inserimos no cdigo, possuem uma sequncia, que
precisarei explicar.

Observe que a primeira instruo adicionada no mtodo


Draw foi:
fundo_tela_swing_copters.Draw(graphics);

Que ir exibir uma imagem de fundo, que a fase do


famoso jogo Swing Copters.
Em seguida, temos a seguinte instruo:
titulo_swing_copters.Draw(graphics);

58

Luciano Alves da Silva


Que ir exibir o ttulo Swing Copters na tela. Como essa a
segunda imagem a ser exibida, a mesma exibida a frente
da imagem de fundo.
Na terceira instruo temos a seguinte linha de cdigo:
imagem.Draw(graphics);

Que ir desenhar o personagem do jogo na tela. Como


essa a terceira imagem a ser exibida na tela, a mesma
mostrada a frente da imagem de fundo e do ttulo.
Executando o nosso cdigo, teremos o seguinte resultado :

Resultado do cdigo na tela

59

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
Invertendo uma imagem na tela
A classe Image possui um mtodo chamado Draw que
serve para exibirmos uma imagem na tela. Pois bem, o
mesmo mtodo possui um segundo parmetro que nos
permite inverter a imagem exibida na horizontal.
Para realizarmos essa demonstrao de inverso de
imagem vamos alterar dentro do mtodo Draw, conforme
mostra instruo destacada em negrito em seguida:
public void Draw(Graphics graphics)
{
fundo_tela_swing_copters.Draw(graphics);
titulo_swing_copters.Draw(graphics);
imagem.Draw(graphics,FlipEffect.HORIZONTAL);
}

Observe que no objeto imagem (que mostra o personagem


na tela), adicionamos o segundo argumento no mtodo
Draw, o argumento FlipEffect.HORIZONTAL (que indica
que a imagem ser invertida na horizontal). Vejamos o
resultado :

60

Luciano Alves da Silva

Imagem invertida na horizontal

61

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Capitulo
5
Movendo
elementos do jogo pela tela

o captulo anterior aprendemos como visualizar


elementos (como imagens) na tela, porm, as
imagens vistas ficam num ponto fixo da dela,
definido pelo cdigo. Agora vamos aprender a movimentar
esses elementos pela tela do jogo usando os recursos
oferecidos pela biblioteca GameUtil2D no Java.
Primeiramente vamos criar um novo projeto no Eclipse Luna
(usando o arquivo GameUtil2D_Java1.x.zip). O nome do
nosso projeto ir se chamar Movendo Objetos pela Tela.
Depois de criado o projeto copie todas as imagens
presentes dentro da pasta Capitulo 5 (que j acompanha
este material) para dentro do nosso projeto, para a pasta
drawables .
Dentro da seo de declarao de atributos da classe vamos
digitar as seguintes instrues em negrito abaixo :

62

Luciano Alves da Silva


Image aviao, nuvem, ceu_azul;

Agora dentro do mtodo GameMain vamos digitar o


seguinte bloco de comandos destacados em negrito a
seguir :
public GameMain()
{
aviao = new Image("aviao", 0, 0, 90, 70);
nuvem = new Image("nuvem", 250, 100, 90,70);
ceu_azul = new Image( "ceu_azul", 0, 0, 800,
480);
}

Agora vamos no mtodo Draw para adicionarmos as


seguintes linhas de comando:
public void Draw(Graphics graphics)
{
ceu_azul.Draw(graphics);
nuvem.Draw(graphics);
aviao.Draw(graphics);
}

Nas linhas de comando que adicionarmos acima, todas


elas, desenham as imagens na tela do jogo. Agora, as
linhas de comando acima foram adicionadas na seguinte
sequencia:
A primeira linha de comando que adicionamos, desenha
a imagem do cu azul na tela, at ai tudo bem. Na linha

63

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

seguinte desenhamos a nuvem na tela, essa nuvem ser


desenhada na frente da imagem do cu azul. Por ltimo,
desenhamos a imagem do avio, e esse avio ser
desenhado na frente da imagem da nuvem e do cu azul
(conforme j foi explicado no captulo anterior).
Depois de escrever o cdigo , vamos executar nossa
aplicao e conferir os resultados:

Jogo em execuo na tela

Por enquanto s conseguimos visualizar o nosso avio,


mas, no podemos moviment-lo pela tela ainda.

64

Luciano Alves da Silva

Como havia falado, iremos movimentar os objetos via


teclado (neste caso aqui, o avio).
Para isso dentro do mtodo Update vamos digitar o
seguinte bloco de comandos destacado em negrito abaixo:
public void Update(KeyboardState keyboardState,
MouseState mouseState) {
if (keyboardState.IsKeyDown(Keys.RIGHT))
aviao.MoveByX(5);
else if (keyboardState.IsKeyDown(Keys.LEFT))
aviao.MoveByX(-5);
else if (keyboardState.IsKeyDown(Keys.UP))
aviao.MoveByY(-5);
else if (keyboardState.IsKeyDown(Keys.DOWN))
aviao.MoveByY(5);
}

Vamos analisar os comandos digitados em negrito. Na


instruo :
if (keyboardState.IsKeyDown(Keys.Right))
aviao.MoveByX(5);

Verifico se a tecla de direo para direita (representada por


Keys.RIGHT)

est

pressionada,

atravs

do

mtodo

IsKeyDown (do objeto keyboardState). Caso verdadeiro,


executado o mtodo MoveByX que responsvel por
deslocar o nosso avio. Observe que o valor que passamos

65

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
como parmetro para o mtodo foi 5, ou seja, nosso avio
ir andar 5 pixels para a direita partindo da posio atual
que ele se encontra.
A explicao acima similar para as demais condies
seguintes.
Vamos executar a aplicao para conferir os resultados,
conforme mostra a figura seguinte :

Movendo nosso avio pela tela

Se observarmos o jogo, ns conseguimos mover o avio


pela tela, porm, a nuvem que adicionamos no jogo est

66

Luciano Alves da Silva

imvel. O ideal seria que essa nuvem se movimentasse,


dando a sensao de que o avio est voando (em
movimento).
Para colocarmos a nuvem em movimento, precisaremos
adicionar mais algumas instrues. Para comear vamos
declarar um atributo, conforme voc pode conferir em
seguida (na seo de declarao de atributos) :
int largura_tela = 800;

Agora dentro do mtodo Update vamos adicionar o


seguinte comando destacado em negrito, como segue:

public void Update(KeyboardState keyboardState,


MouseState mouseState) {
:
else if (keyboardState.IsKeyDown(Keys.DOWN))
aviao.MoveByY(5);
nuvem.MoveByX(-15);
if (nuvem.GetX() < -nuvem.GetWidth())
nuvem.SetX(largura_tela);
}

67

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
Irei explicar cada linha de comando das instrues
adicionadas acima. A linha:
nuvem.MoveByX(-15);

Desloca a nuvem para a esquerda, de 15 em 15 pixels


(lembre-se : valor positivo significa deslocamento pra direita,
e valor negativo deslocamento para esquerda).
A prxima instruo :
if(nuvem.GetX() < -nuvem.GetWidth())

Verifica se a nuvem saiu for a da tela. Como interpretamos a


avaliao feita pela condio acima ? Irei explicar para voc.
O mtodo GetX (do objeto nuvem, do tipo Image) retorna a
posio da coordenada X do objeto na tela, e o mtodo
GetWidth retorna a largura do objeto. Quando a posio X
de qualquer objeto for menor que o valor negativo de sua
largura, significa que o objeto no est visvel na tela, ou
seja, est fora dela (fora pelo lado esquerdo da tela).
Quando isso acontece, executada a seguinte instruo:
nuvem.SetX(largura_tela);

Que reposiciona a nuvem para surgir a partir da direita


da tela, dando a sensao que o avio est realmente
voando. Execute novamente a aplicao e confira o
resultado:

68

Luciano Alves da Silva

Nuvem em movimento
Se observarmos o nosso jogo, o avio pode se deslocar
perfeitamente pela tela, porm, se deixarmos o avio se
mover constante (e unicamente) para uma direo, o
mesmo sai da tela (independente se para frente, pra trs,
pra cima ou para baixo). Como solucionar esse problema ?
simples, basta limitarmos seu movimento de forma que o
mesmo no saia da tela.
Para realizarmos esse procedimento, primeiramente, vamos
declarar o seguinte atributo em seguida (destacado em
negrito):

69

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

:
int largura_tela = 800;
int altura_tela = 480;

Agora vamos dentro do mtodo Update para digitarmos as


seguintes linhas de cdigo destacadas em negrito abaixo:
public void Update(KeyboardState keyboardState,
MouseState mouseState) {
if (keyboardState.IsKeyDown(Keys.RIGHT))
{
aviao.MoveByX(5);
if ((aviao.GetX() + aviao.GetWidth()) >
largura_tela)
aviao.SetX(largura_tela aviao.GetWidth());
}
else if (keyboardState.IsKeyDown(Keys.LEFT))
{
aviao.MoveByX(-5);
if (aviao.GetX() < 0)
aviao.SetX(0);
}
else if (keyboardState.IsKeyDown(Keys.UP))
{
aviao.MoveByY(-5);
if (aviao.GetY() < 0)
aviao.SetY(0);
}

70

Luciano Alves da Silva


else if (keyboardState.IsKeyDown(Keys.DOWN))
{
aviao.MoveByY(5);
if ((aviao.GetY() + aviao.GetHeight()) >
altura_tela)
aviao.SetY(altura_tela aviao.GetHeight());
}
nuvem.MoveByX(-15);
if (nuvem.GetX() < -nuvem.GetWidth())
nuvem.SetX(largura_tela);

Irei explicar agora a finalidade de cada instruo adicionada


no cdigo. A instruo:

if((aviao.GetX()
largura_tela)

aviao.GetWidth())

>

Avalia se o avio est comeando a sair da tela indo para


frente (se a posio atual do avio na coordenada X somado
com a largura do mesmo for maior que a largura da tela.
Isso uma regra padro). Caso a condio seja verdadeira,
executada seguinte instruo:
aviao.SetX(largura_tela - aviao.GetWidth());

71

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
Que impede que o avio saia da tela, atravs do reajuste da
posio dele na coordenada X, que ser : largura da tela
largura do avio. Quando o avio anda para trs,
executada a seguinte avaliao condicional:
if(aviao.GetX() < 0)

Que verifica se o avio est comeando a sair da tela (se a


posio X do objeto for menor que 0). Se a condio for
verdadeira, ser executada a seguinte instruo:
aviao.SetX(0);

Que reajusta a posio do avio , pela coordenada X


(definindo a coordenada X com o valor 0).
Quando o avio anda para cima, executada a seguinte
avaliao condicional:
if(aviao.GetY() < 0)

Que verifica se o avio est comeando a sair da tela (se a


posio Y do objeto for menor que 0). Se a condio for
verdadeira, ser executada a seguinte instruo:
aviao.SetY(0);

Que reajusta a posio do avio , pela coordenada Y


(definindo a coordenada Y com o valor 0).

72

Luciano Alves da Silva


Quando o avio est se movimentando para baixo,
executada a seguinte avaliao:
if((aviao.GetY() + aviao.GetHeight()) >
altura_tela)

Que verifica se o avio est comeando a sair da tela (se a


posio atual do avio na coordenada Y somado com a
altura do mesmo for maior que a altura da tela. Isso uma
regra padro). Caso a condio seja verdadeira, executada
a seguinte instruo:
aviao.SetY(altura_tela - aviao.GetHeight());

Que impede que o avio saia da tela, atravs do reajuste da


posio dele na coordenada Y, que ser a altura da tela a
altura do avio.
Executando nossa aplicao, teremos o seguinte resultado:

73

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Agora o avio no sai mais da tela

74

Luciano Alves da Silva

Capitulo 6 Trabalhando com


animao de sprites

os captulos anteriores aprendemos a visualizar


imagens estticas no jogo (pode ser qualquer
elemento do jogo como uma rvore, um poste, um
bloco e etc.). Agora, se eu quisesse que algum elemento do
jogo apresenta-se alguma animao ? Neste captulo vamos
aprender como realizar essas animaes usando sprites no
jogo.

Na maioria dos jogos em 2D (talvez podemos dizer todos),


alguns dos elementos apresentam algum tipo de
animao (como o movimento de um personagem ou a
ao de algum objeto). Agora a pergunta que fao :
como so realizadas essas animaes no jogo ? Essas
animaes so realizadas utilizando o que ns chamamos
de sprites. O que vem a ser uma sprite ? Sprites nada
mais so do que um conjunto de imagens, onde cada
imagem representa o movimento ou ao de um
determinado elemento do jogo (como um personagem
ou um objeto do jogo qualquer).
Vamos ver abaixo um conjunto de imagens (sprites) de
um personagem, onde cada imagem representa um
movimento:

75

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Sprites de um personagem de um jogo (dando soco)


Como funciona a animao de um personagem (ou objeto)
durante o jogo ? Se observarmos as imagens acima, cada
uma delas representa um movimento, e cada uma delas
exibida numa fatia de tempo, dando a sensao de
movimento ou ao.
Para trabalharmos com animao de sprites no GameUtil2D
faremos

uso

da

classe

chamada

AnimationSprites,

destinada somente para esse tipo de tarefa (presente


dentro do pacote gameutil2d.classes.basic da nossa
biblioteca).
Para comearmos vamos criar um novo projeto no Eclipse
chamado Animacao de Sprites. Em seguida copie todas as
imagens presentes dentro da pasta Capitulo 6 (que
acompanha este material) para dentro da pasta drawables.

76

Luciano Alves da Silva


Agora dentro da classe GameMain , na seo de declarao
de atributos, vamos digitar a seguinte instruo abaixo:
AnimationSprites naruto;

Agora dentro do mtodo construtor GameMain vamos


digitar o seguinte bloco de comandos destacados em
negrito abaixo:
public GameMain()
{
naruto = new AnimationSprites(0, 0, 124, 164);
naruto.Add("naruto_parado_1");
naruto.Add("naruto_parado_2");
naruto.Add("naruto_parado_3");
naruto.Add("naruto_parado_4");
naruto.Start(6, true);
}

Irei explicar o cdigo inserido no mtodo acima. A linha de


comando:
naruto = new AnimationSprites(0, 0, 124, 164);

Carrega a instncia do objeto naruto do tipo


AnimationSprites. No primeiro e segundo parmetro,
passamos respectivamente a coordenada X e Y do objeto na
tela. J os dois ltimos parmetros representam ,
respectivamente , a largura e a altura do objeto (124 para
largura e 164 para altura). Nas linhas de comando seguinte:

77

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
:
naruto.Add(naruto_parado_1);
naruto.Add(naruto_parado_2);
naruto.Add(naruto_parado_3);
naruto.Add(naruto_parado_4);
:

Adicionamos as imagens (sprites) dentro do objeto, para


que possamos ter uma animao do personagem, atravs
do mtodo Add. Em seguida, vem a seguinte instruo:
naruto.Start(6, true);

Que tem a finalidade de iniciar a animao, atravs do


mtodo Start. Esse mtodo possui dois parmetros : O
primeiro parmetro responsvel por definir, em frames, o
intervalo da troca de imagens, e o segundo definimos se a
animao vai ficar em loop (caso true) ou no (caso false).
Agora no mtodo Draw vamos adicionar a seguinte
instruo destacada:
public void Draw(Graphics graphics)
{
naruto.Draw(graphics);
}

Depois de digitar o cdigo solicitado, execute o nosso jogo e


confira o resultado, como demonstra a figura seguinte:

78

Luciano Alves da Silva

Animao do personagem em execuo


Em uma animao de sprites tambm podemos aplicar o
efeito de flip (inverso) de uma imagem, na horizontal
(como j havamos visto com imagens estticas). Para
invertermos uma imagem na horizontal, basta adicionar um
parmetro no mtodo Draw do objeto, o valor true.
Vamos voltar para o mtodo Draw da classe GameMain
para substituirmos a linha abaixo:
naruto.Draw(graphics);

Por essa:

79

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
naruto.Draw(graphics,FlipEffect.HORIZONTAL);

Depois de realizar a alterao no cdigo execute novamente


o jogo , conforme demonstra o resultado mostrado abaixo .

Animao invertida na horitontal

Mais um exemplo de animao de sprites


Vamos realizar agora mais uma pratica de animao de
sprites no Java usando a classe AnimationSprites (da
biblioteca GameUtil2D). Para essa pratica vamos importar
para o Eclipse um projeto j feito (que j acompanha este
material),
que

o
arquivo

80

Luciano Alves da Silva


AnimacaoSprites_GundamWing.zip (presente dentro da
pasta Capitulo 6).
Depois de importar o nosso projeto execute-o, e confira o
resultado conforme demonstra a figura seguinte:

Jogo em execuo

Esse um exemplo baseado no jogo Gundam Wing


Endless Duel, um dos grandes sucessos da plataforma
Super Nitendo.
A inteno deste exemplo trocarmos as posies dos
personagens do jogo. Para isso, vamos na classe GameMain

81

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
e, em seguida, vamos realizar as seguintes modificaes
citadas a seguir:
Dentro do mtodo construtor GameMain vamos substituir
as seguintes linhas de cdigo destacadas em negrito
abaixo:

public GameMain()
{
:
wing_gundam = new AnimationSprites(450, 130, 200,
250);
wing_gundam.Add("wing_gundam_parado_1");
wing_gundam.Add("wing_gundam_parado_2");
:
heavy_arms = new AnimationSprites(100, 120, 197,
263);
heavy_arms.Add("heavy_arms_parado_1");
heavy_arms.Add("heavy_arms_parado_2");
:
}

Pelas seguintes destacadas em negrito em seguida :


public GameMain() {
:
wing_gundam = new AnimationSprites(100, 130, 200,
250);
wing_gundam.Add("wing_gundam_parado_1");

82

Luciano Alves da Silva


wing_gundam.Add("wing_gundam_parado_2");
:
heavy_arms = new AnimationSprites(450, 120, 197,
263);
heavy_arms.Add("heavy_arms_parado_1");
:
}

Agora dentro do mtodo Draw vamos substituir as


seguintes linhas de cdigo destacadas em negrito abaixo:
public void Draw(Graphics graphics) {
:
wing_gundam.Draw(graphics,FlipEffect.HORIZONTAL);
heavy_arms.Draw(graphics);
}

Pelas seguintes linhas de cdigo destacadas em negrito


abaixo:

public void Draw(Graphics graphics){


:
wing_gundam.Draw(graphics);
heavy_arms.Draw(graphics,FlipEffect.HORIZONTAL);
}

Depois de realizada as modificaes execute novamente o


nosso jogo, e confira o resultado que mostrado na figura a
seguir:

83

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Jogo em execuo Imagens trocadas


Regras para a criao de sprites

Quando vamos criar as sprites (animaes) de um


determinado elemento de um jogo, normalmente, cada
imagem que ir representar uma ao desse elemento deve
ter o mesmo tamanho (padronizado para cada elemento do
jogo), e quando salvas, devero estar nomeadas de forma
que fique fcil a organizao das imagens (como por
exemplo
:
personagem_andando_1.png
,
personagem_andando2.png e etc.).

84

Luciano Alves da Silva

Capitulo 7
Detectando
colises entre objetos no
jogo

ma das tcnicas mais importantes, que no se pode


faltar em um jogo, a deteco de colises entre
elementos . Neste captulo, iremos aprender a
detectar se dois objetos (ou mais) se colidem um com o
outro no jogo, atravs dos recursos oferecidos neste
material.
Primeiramente vamos criar um novo projeto no Eclipse com
o GameUtil2D chamado Colisoes entre Objetos.
Depois de criarmos o projeto copie todas as imagens
(presentes dentro da pasta Capitulo 7) para dentro projeto
na pasta drawables.
Dentro da seo de declarao de atributos da classe,
vamos realizar as declaraes abaixo, como segue:
AnimationSprites personagem;
Image cenario;
Image obstaculo,obstaculo2;

85

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]

Agora dentro do mtodo construtor GameMain vamos


adicionar as seguintes instrues:
public GameMain() {
personagem = new AnimationSprites((400 - 24), 305,
48, 50);
personagem.Add("monstro_andando_1");
personagem.Add("monstro_andando_2");
personagem.Start(10, true);
cenario = new Image("cenario", 0, 0, 800, 480);
obstaculo = new Image("obstaculo", 80, 253, 68,
120);
obstaculo2 = new Image("obstaculo", 630, 253, 68,
120);
}

Agora dentro do mtodo Update vamos adicionar as


seguintes instrues destacadas em negrito:
public void Update(KeyboardState keyboardState,
MouseState mouseState) {
if (keyboardState.IsKeyDown(Keys.RIGHT))
personagem.MoveByX(5);
else if (keyboardState.IsKeyDown(Keys.LEFT))
personagem.MoveByX(-5);
}

86

Luciano Alves da Silva


Agora dentro do mtodo Draw vamos adicionar as
seguintes instrues destacadas em negrito:
public void Draw(Graphics graphics) {
cenario.Draw(graphics);
personagem.Draw(graphics);
obstaculo.Draw(graphics);
obstaculo2.Draw(graphics);
}

Depois de digitar os cdigos solicitados, execute a aplicao


e confira o resultado:

Jogo em execuo

87

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
Se observarmos o jogo acima nosso personagem pode se
movimentar de um lado para o outro, porm, o nosso
personagem no pode ultrapassar os obstculos (que so os
elevadores).
A ideia seria desenvolver um cdigo que ir detectar a
coliso do personagem com os obstculos, que no caso so
os elevadores.
Para adicionarmos o cdigo de coliso vamos no mtodo
Update para adicionarmos as seguinte instrues,
destacados em negrito abaixo:
public void Update(KeyboardState keyboardState,
MouseState mouseState) {
if (keyboardState.IsKeyDown(Keys.RIGHT))
{
personagem.MoveByX(5);
//Colidiu com o obstculo da direita
//("obstaculo2")
if (Collision.Check(personagem, obstaculo2))
personagem.MoveByX(-5);
}
else if (keyboardState.IsKeyDown(Keys.LEFT))
{
personagem.MoveByX(-5);
//Colidiu com o obstculo da esquerda
//("obstaculo")
if (Collision.Check(personagem, obstaculo))
personagem.MoveByX(5);
}

88

Luciano Alves da Silva


Irei explicar agora o cdigo que avalia a coliso do
personagem com as barras horizontais e verticais. A
expresso abaixo:
if (keyboardState.IsKeyDown(Keys.RIGHT))

Verifica se a tecla seta para direita foi pressionada atravs


do mtodo IsKeyDown (com o argumento Keys.RIGHT). Se
a condio for verdadeira, executado a instruo dentro
da condio :
personagem.MoveByX(5);

Em uma determinada circustncia, poder haver um


determinado momento em que o personagem poder se
colidir com o obstculo da direita (o objeto obstaculo2).
agora, como avaliar se houve a coliso ? Para verificar se
houve uma coliso entre dois objetos usamos o mtodo
Check da classe Collision, como podemos ver na instruo
abaixo:
if(Collision.Check(personagem, obstaculo2))

Se ocorrer uma coliso, nosso personagem ir voltar um


passo anterior (se ele andou 5 pixels para direita e nesse
movimento ele colidiu com o obstculo, ele voltar um
passo anterior), conforme voc confere em seguida:
personagem.MoveByX(-5);

89

Desenvolvendo Jogos 2D com Plataforma Java - Guia para


Desenvolvedores [VERSO DE AMOSTRA]
A explicao das condies seguintes similar ao que foi
explicado agora.
Vamos executar agora a nossa demonstrao e conferir os
resultados.

Jogo em execuo Personagem colide com o elevador


Como pudemos observar acima, a coliso uma das
tcnicas de desenvolvimento de jogos mais importantes.
Com essa tcnica conseguimos muitas coisas (como verificar
se o personagem est pisando em algum bloco, se um tiro
atingiu o inimigo e etc.).

90

Luciano Alves da Silva

Consideraes Finais

Neste livro aprendemos SOMENTE AS NOES BSICAS de


desenvolvimento

de

jogos

atravs

do

framework

GameUtil2D utilizando a linguagem Java. Vimos um pouco


sobre fundamentos de desenvolvimento de jogos

aprendemos a instalar o framework GameUtil2D na


ferramenta Eclipse Luna (para o desenvolvimento de jogos
com o Java). Neste material aprendemos e desenvolvemos
algumas demostraes de jogos, atravs do aprendizado
bsico sobre tcnicas de criao de games (como animaes
de sprites, colises e etc.).
Para o aprendizado COMPLETO desta obra, adquira a
VERSO COMPLETA do livro no site oficial da EDITORA
AGBOOK (http://www.agbook.com.br).

Espero que esse material lhe tenha sido til.


Um forte abrao!

91