Usando JavaFX no desenvolvimento de jogos

Propaganda
Usando JavaFX no
desenvolvimento de jogos
Hamilton Lima
Abril 2009
Roteiro
•
•
•
•
Introdução ao JavaFX
Programação para Jogos 2D
Desafios enfrentados com JavaFX
Conclusões
Introdução JavaFX
•
•
•
•
Linguagem de Script
Oferece fácil integração com Java
Recursos visuais superiores a Swing
Aposta da SUN no mercado RIA
Competidores do JavaFX
• Silverlight da Microsoft
▫ Lançado em 2008
• Adobe Flash / Flex / Air
▫ Flash desde 1996, Flex em 2005
• JavaFX lançado no final de 2008
Distribuição de Flash players [1]
Ofertas de emprego em RIA
mercado americano [2]
Ofertas de Java comparado
com outras linguagens [3]
Cenário
• JavaFX tem A comunidade Java por trás
• A adoção é estratégica para competir no
mercado RIA
zzzzz
pelamordeDeus !
Show me the code !!
JavaFX Hello World
• Stage {
•
title: "Application title"
•
width: 250
•
height: 80
•
scene: Scene {
•
content: Text {
•
font : Font {
•
size : 16
•
}
•
x: 10, y: 30
•
content: "Hello World"
•
}
•
}
• }
Movendo um objeto na tela
• var myChar :Rectangle = Rectangle {
•
x: 20,
•
y: 20
•
width: 60,
•
height: 60
•
fill: Color.RED
•
onKeyPressed: function(e: KeyEvent){
•
if( e.code == KeyCode.VK_LEFT ){ myChar.x -= 3; }
•
if( e.code == KeyCode.VK_RIGHT ){ myChar.x += 3; }
•
if( e.code == KeyCode.VK_UP ){ myChar.y -= 3; }
•
if( e.code == KeyCode.VK_DOWN ){ myChar.y += 3; }
•
}
• };
Movendo um objeto na tela
• Stage {
•
title: "Movendo um quadrado pela tela"
•
width: 320
•
height: 280
•
scene: Scene {
•
content: [
•
myChar
•
]
•
}
• }
Um jogo mais complexo… [4]
Falando de Jogos 2D
•
•
•
•
Loop principal
Eventos
Reações
Eventos baseados no loop do jogo
Desafios de jogos em JavaFX
• Coisas legais
▫
▫
▫
▫
Criação loop principal
Suporte a SVG
Caching de sprites
Suporte a colisão
• Coisas nem tão legais
▫ Suporte a audio
▫ Distribuição
Coisas Legais
Criação loop principal
Roda indefinidamente
com passos de
10 milisegundos
Criação loop principal
Procura nos elementos
De Group que nodes são
Updatable e
executa método
Update()
Exemplo de update()
Suporte a SVG
• SVG – Scalable Vector Graphics
• Pode ser redimensionado sem perder qualidade
• Baseada em XML
Como funciona o suporte a SVG [5]
Crie o SVG
no InkScape
Converta
para arquivo
FXZ
Use no
código
JavaFX
Usando o FXZ no código JavaFX
FXDLoader.load() cuida
De trazer o conteúdo
De um arquivo FXZ para
A aplicação
Caching de sprites
Um Pool de objetos como
Outro qualquer, com a
Diferença de somente
Fazemos caching da criação
Do objeto pois a cada
Solicitação fazemos
uma cópia do objeto.
Suporte a colisão
Somente através
de retangulos
Suporte a colisão
Colidiu com o retângulo
Da circunferência
Alternativa para a limitação da
colisão
• Usar uma boudingbox
menor que o elemento
desenhado para calcular a
colisão.
• Valeu Silveira Neto [6] ! =)
Coisas nem tão legais
Suporte a áudio
• JavaFX tem embutido a engine de audio e video
da On2 [7]
• Somente suporta uma combinação mágica de
MP3
▫ 48000Hz compactada com 96bits
• Ticket de bug aberto
Suporte a áudio alternativa
• Implementação [9] com uso de biblioteca MP3
implementada em Java – Jlayer [8]
Distribuição do resultado final
• Applet
▫ Não possui progressbar, talvez uma solução como
a usada no PulpCore [10], de criar um Applet
loader.
• Webstart
▫ Interface com usuário em inglês
▫ JNLP é baixado precisando o usuário mandar
executar
▫ JavaFX RunTime SOMENTE online, não pode
fazer download com o Jogo
Conclusões
▫
▫
▫
▫
Criação loop principal
Suporte a SVG
Caching de sprites
Suporte a colisão
▫ Suporte a audio
▫ Distribuição
Conclusões
Como me achar ?
• Grite meu nome bem
alto debaixo de uma
amendoeira no
Cachambi
• Fale com meu
secretário,
o Sr. Wilson
• Procure debaixo da cama
• Comente no meu blog
www.athanazio.com
Referências
• [1] Flash Player penetration ,
http://www.adobe.com/products/player_census/flashplayer/
• [2] Job offers in RIA,
http://www.indeed.com/jobtrends?q=JavaFX,+silverlight,+adobe+
flex
• [3] Job offers Java against JavaScript, C#, VbScript, Flash,
http://www.indeed.com/jobtrends?q=Java,+javascript,+c%23,+vbs
cript,+flash
• [4] código fonte dos cabeçudinhos,
http://svn.vacavitoria.com/cabecudinhos_1/
• [5] processo de criação de interface,
http://www.athanazio.com/2009/03/10/javafx-processo-decriacao-de-interface/
Referências
• [6] How to create a RPG like game,
• http://silveiraneto.net/2008/12/08/javafx-how-tocreate-a-rpg-like-game/
• [7] On2 technologies, http://www.on2.com/
• [8] Jlayer – pure Java mp3 library,
http://www.javazoom.net/javalayer/javalayer.html
• [9] Implementação de suporte a MP3 com Jlayer,
http://svn.vacavitoria.com/cabecudinhos_1/mp3AsMed
iaPlayer/
• [10] PulpCore biblioteca para jogos 2D em Applet,
http://www.interactivepulp.com/pulpcore/
Download