Post on 25-May-2015
Usando JavaFX no desenvolvimento de jogosHamilton LimaAbril 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 RIAmercado 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]
Usando o FXZ no código JavaFX
FXDLoader.load() cuidaDe 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çãoDo objeto pois a cada Solicitação fazemos uma cópia do objeto.
Suporte a colisãoSomente 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 ?
•Procure debaixo da cama•Comente no meu blog
www.athanazio.com
• Fale com meu secretário, o Sr. Wilson
• Grite meu nome bem alto debaixo de uma amendoeira no Cachambi
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,+vbscript,+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-de-criacao-de-interface/
Referências• [6] How to create a RPG like game, • http://silveiraneto.net/2008/12/08/javafx-how-to-
create-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/mp3AsMediaPlayer/
• [10] PulpCore biblioteca para jogos 2D em Applet, http://www.interactivepulp.com/pulpcore/