Usando JavaFx No Desenvolvimento De Jogos

Post on 25-May-2015

1.881 views 3 download

Transcript of Usando JavaFx No Desenvolvimento De Jogos

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/