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/