A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara Geber Ramalho

Apresentações semelhantes


Apresentação em tema: "Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara Geber Ramalho"— Transcrição da apresentação:

1 Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br Desenvolvendo Jogos em Java ME para celulares Aula 1 Introdução à Java ME

2 Novembro, 20072 Sobre quem vos fala... n Meantime Mobile Creations – Empresa incubada no C.E.S.A.R focado no desenvolvimento de jogos e aplicativos, baseados em dispositivos móveis, para usuários finais n Um dos pioneiros mundiais (desde 2001) na tecnologia J2ME n Várias tecnologias wireless: J2ME, BREW, WAP, SMS e MMS n Atualmente, distribui jogos para EUA, Europa e alguns países da América Latina e Ásia n Parceria com diversos fabricantes, publishers e operadoras n Produzimos mais de 40 jogos para celulares (alguns para a Motorola, Sony Ericsson, etc) n Atua como publisher no Brasil, com parceria com todas as operadoras

3 Novembro, 20073 Agenda n Mercado de jogos wireless n Principais tecnologias n Introdução a Java ME n Wireless Game Design n Criando nosso Jogo n Sugestão de Melhorias n Dicas de performance / redução de código

4 Novembro, 20074 n Ciclo de desenvolvimento deve ser rápido (<6 meses) n Retorno do investimento lento Mercado: Cadeia de Valor Technology Brands Developer Carrier Mobile Portal Publisher End-user Mobile Portal Publisher Fluxo de produção >>> <<< Fluxo de receita (R$)

5 Novembro, 20075 Mercado: Visão geral n Principais Players: EA Mobile (Jamdat), Gameloft (Ubi Software), Glu Mobile, Digital Chocolate, Hands On e I- Play. – Empresas com atuação mundial – Faturamentos crescentes e superiores a 60 milhões de dólares por ano n Modelo de negócios padrão: revenue share em cima das vendas das operadoras para os usuários finais n Mercando em processo de consolidação

6 Novembro, 20076 Principais Tecnologias n SMS/MMS – Jogos baseados na troca de mensagens (forca, quiz, penalty, etc.) n WAP/xHTML/iMODE – Jogos baseados em páginas estáticas (velha, pedra papel tesoura, etc.) n Brew (Binary Runtime Environment for Windows) – Ambiente de execução para chipset Qualcomm – C++ e API definida pela Qualcomm (animações, som, recursos de rede, etc...) – Principal mercado: EUA n Java ME – Java otimizado para dispositivos com limitações – Adotado por todos os maiores players do mercado – API’s especificadas pela comunidade JCP – Padrão do mercado

7 Novembro, 20077 Telefones Java (>650 dispositivos) http://developers.sun.com/techtopics/mobility/device/pub/device/list.do 20 dispositivos por página

8 Novembro, 20078 Introdução a plataforma J2ME SERVIDOR DESKTOP SMART- CARDS CELULARES

9 Novembro, 20079 Arquitetura Java ME Device Hardware Host Operating System Configuration: Profiles Libraries KVM Application

10 Novembro, 200710 Universo Java ME Hoje… n Java Community Process (JCP) n Java Specification Request (JSR) http://java.sun.com/javame/technology/jcp.jsp

11 Novembro, 200711 Configurações n Uma especificação que define o ambiente de software para uma família de dispositivos, geralmente: – Os tipos e quantidade de memória disponível – Tipos de processadores e velocidade – Tipo de conexão de rede n Inclui um conjunto básico de classes Java n É especificada pela JCP n Connected Device Configuration (CDC) – High end consumer devices  PDA, TV set-top boxes, etc n Connected, Limited Device Configuration (CLDC) – Low end consumer devices  Cell phones, limited PDAs, etc

12 Novembro, 200712 CLDC 1.0 n CLDC - Connected Limited, Device Configuration – Dispositivos limitados com poucos recursos – Processador de, no mínimo 8 Mhz – A partir de 160 K de memória heap reservada pra Java – Acesso a rede com pouca largura de banda n Target Devices – Celulares – Two Way Pagers – Personal Organizers – etc.

13 Novembro, 200713 Escopo do CLDC n Define: – Linguagem Java e características da VM – I/O – Networking framework – Segurança – Internacionalização n Não define: – Gerenciamento do ciclo de vida da aplicação (instalação, execução, deleção) – Interface com o usuário – Tratamento de eventos – Interação entre usuário e aplicação (comandos, etc…)

14 Novembro, 200714 Limitação do CLDC n CLDC 1.0 possui algumas limitações: – Ausência de ponto flutuante – Ausência de Weak References – Ausência de Finalização  Não existe o método finalize() no CLDC – Não possui suporte a JNI. – Não possui a API de Reflection. – Ausência de daemon-threads e thread groups. – Limitação no suporte a Internacionalização  Permite a conversão de byte stream para Unicode e vice-versa – Limitação no tratamento de Erros  Apenas duas classes: java.lang.VirtualMachineError, java.lang.OutOfMemoryError

15 Novembro, 200715 Limitação do CLDC n CLDC 1.1 adiciona alguns recursos ao CLDC 1.0: – Adição de ponto flutuante – Adição de Weak Reference – Adição de suporte a nomes de Threads – Memória mínima de 162 para 192 kbytes

16 Novembro, 200716 Pacotes do CLDC n Herdados do J2SE – java.lang – java.io – java.util n Específicos do CLDC – javax.microedition.io

17 Novembro, 200717 Profiles n Um profile ou “perfil” é uma coleção de API´s em Java que complementa uma configuração a fim de prover habilidades para uma família de dispositivos n É especificada pela JCP n O principal objetivo é garantir a interoperabilidade entre uma família de dispositivos. n MIDP (Mobile Information Device Profile): Principal e presente na maioria absoluta dos dispositivos – MIDP 1.0 – MIDP 2.0 – MIDP 2.1 – MIDP 3.0 (em breve)

18 Novembro, 200718 MIDP n Mobile Information Device Profile (MIDP). n MIDP define: – Interface com o Usuário – Persistência (usando um modelo simples orientado a registros) – Networking (estende o Generic Connection framework do CLDC) – Ciclo de vida da Aplicação – Tratamento de eventos (teclas, interrupção, etc.) n Requisitos de Hardware MIDP 1.0MIDP 2.0 Memória não volátil128 Kb256 Kb Memória volátil32 Kb128 Kb Tela96x54 - 2 cores EntradaTeclado e/ou touch screen ConectividadeHTTP 1.1 SomNão exigidoTons, WAV, MIDI

19 Novembro, 200719 Pacotes do MIDP 1.0 n MIDP Packages: – javax.microedition.midlet  javax.microedition.midlet.MIDlet – javax.microedition.lcdui – javax.microedition.rms  javax.microedition.rms.RecordStore

20 Novembro, 200720 Pacotes adicionais do MIDP 2.0 n MIDP 2.0 Packages: – javax.microedition.media  javax.microedition.media.Player  javax.microedition.media.Control – javax.microedition.media.control  javax.microedition.media.control.VolumeControl – javax.microedition.lcdui.game – javax.microedition.io  javax.microedition.io.PushRegistry Layer TiledLayerSprite LayerManager GameCanvas * game Canvas lcdui Displayable

21 Novembro, 200721 O que é um MIDlet n É uma aplicação MIDP: – Possui uma classe Java que estende da classe MIDlet e implementa os seguintes métodos:  startApp()  pauseApp()  destroyApp() – Possui um modelo de ciclo de vida similar aos Applets (explicado adiante).

22 Novembro, 200722 O que é um MIDlet (cont.) n Gerenciado pelo “Java Application Manager” (JAM) – Uma aplicação que deve vir acompanhando a implementação do MIDP e que controla a instalação, execução e remoção dos MIDlets – Provê o ambiente de execução dos MIDlets – Trata todos os erros ocorridos durante a instalação e execução dos aplicativos sem “derrubar” o dispositivo

23 Novembro, 200723 Ciclo de vida dos MIDlets

24 Novembro, 200724 MIDlet Suites e Descritores (JAD) n Uma MIDlet Suite é um conjunto de MIDlets (e seus arquivos) empacotados em um JAR – Uma suite deve possuir pelo menos um MIDlet – JAR contém: Arquivos.class, arquivos de recursos (imagem.png, sons.midi, etc) e um manifest. – MIDLets numa mesma suite podem compartilhar classes, recursos contidos no JAR e memória persistent. – MIDlets de suites diferentes não podem interagir (MIDP 1 e 2) n JAD (Java Application Descriptor) – Pequeno arquivo texto que descreve uma Suite – Usado pela JAM para fazer verificações antes de baixar a Suite – Pode ser usado para guardar propriedades da aplicação n O par JAR/JAD representa o executável da aplicação MIDlet-1: AloMundo,, org.cesar.j2me.AloMIDlet MIDlet-Name: Alô Mundo! MIDlet-Vendor: C.E.S.A.R MIDlet-Version: 1.0 MIDlet-Jar-Size: 7808 MIDlet-Jar-URL: HelloExamples.jar

25 Novembro, 200725 Passos para o desenvolvimento 1 1 2 2 3 3 4 4 5 5 6 6

26 Novembro, 200726 Ambiente de Desenvolvimento n Editor texto + Sun Wireless Toolkit (WTK) (free) – http://java.sun.com/products/sjwtoolkit/ n NetBeans Mobility + WTK (free) – http://www.netbeans.org/products/mobility/ n Eclipse + EclipseME + WTK (free) – http://www.eclipse.org/downloads/index.php http://www.eclipse.org/downloads/index.php – http://eclipseme.org/docs/installation.html n SDK´s dos fabricantes (Nokia, Motorola, SonyEricsson, Siemens,…) – http://developer.motorola.com/docstools/sdks/ – http://forum.nokia.com/ http://forum.nokia.com – http://developer.sonyericsson.com/site/global/home/p_home.jsp n Borland JBuilder ($400 individual) – http://www.borland.com/us/products/jbuilder/index.html

27 Novembro, 200727 Nosso ambiente... n Eclipse Europa (3.3) for Java Developers n Eclipseme plugin 1.7.6 n Sun Java Wireless Toolkit for CLDC (WTK) 2.5.2

28 Novembro, 200728 Exercício 1 - Criar o famigerado “Alô mundo!” - Conceitos de Display - Criação e exibição de um High-Level Displayable - Conceitos de adição e tratamento de Comandos

29 Novembro, 200729 Dica: Esteja com a API ao alcance... n http://java.sun.com/javame/reference/apis/jsr118/

30 Novembro, 200730 Exercício 2 - Incrementar o “Alô Mundo” - Conceitos de Graphics e suas funções - Fontes - Criação e exibição de um Low-Level Displayable - Tratamento de teclas - Criação e renderização de Imagens

31 Novembro, 200731 Agora que vocês já estão craques… n Vamos ao nosso Jogo!!! n Etapas na concepção de um Jogo – Planejando um Jogo – Projetando um Jogo – Desenvolvendo um Jogo – Emulando um Jogo (testes) – Deploy do Jogo (testes reais) n Dicas de performance / Redução de código

32 Novembro, 200732 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br Desenvolvendo Jogos em Java ME para celulares Aula 2 Prática de jogos em Java ME

33 Novembro, 200733 Planejando um jogo n Fase de game design / concepção – Escolha do mercado – Escolha da categoria (Arcade, Puzzle, Ação, Esportes,RPG...) – Benchmark (atari, mega drive, nintendo 8 bits, etc) – Multiplayer / Singleplayer – Celulares foco n Características de um bom jogo wireless – Rápido e fácil de começar e de navegar (evitar uso de muitas softkeys e pressionamento de teclas). – Desafiador mas não impossível. – Jogos curtos ou com savegame – Sem muitas combinações de teclas e regras

34 Novembro, 200734 Planejando um jogo (cont.) n Equipe – Entre 4 e 7 pessoas – Interdisciplinar: artitas gráficos, músicos, game designers, engenheiros de software, engenheiro de testes, etc… n Grana – Em torno de R$ 120.000 n Exigências do mercado (desafios extra) – Ciclo de desenvolvimento curto: 3 a 6 meses – Porte e localização – Otimização e qualidade n Distribuição – Portais de conteúdo – Escravos das operadoras – Número de dispositivos é barreira de entrada

35 Novembro, 200735 Planejando um jogo (cont.) n Limitações: – Tamanho das telas – Memória heap – Número de cores – Som – Tamanho do JAR – Latência da rede – Custo final do jogo deve ficar entre R$ 5,00 e R$ 10,00 – Custo alto no uso da rede (~1 centavo por kbyte – R$ 1,00 a mais no custo de um jogo de 100 kb, só pra fazer o download)

36 Novembro, 200736 Nosso Jogo! n Analisamos tudo que foi falado e… n Shot´em up game simplificadíiiiiiiiiissimo!! n “ Star Hero é um jogo singleplayer, no estilo shoot’em up. O jogo consiste em uma espaçonave controlada pelo jogador que trafega pelas galáxias, atirando em inimigos. Essas ações resultam em pontos para o jogador. O objetivo do jogo é acumular o máximo de pontos possíveis.”

37 Novembro, 200737 Já Temos as Características... Work! n Projetando as classes. Precisamos de: – Um MIDlet (óbvio!) – Uma classe que trata os comandos alto-nível e possui o looping básico do jogo (lê entrada, atualiza estado e pinta a tela) – Uma classe que representa um elemento do jogo (GameObject) – Uma classe representando a nave – Uma classe representando os inimigos – Uma classe representando as balas – Uma classe representando a tela principal com a lógica principal do jogo – Uma classe com todas as constantes (facilitar o acesso)

38 Novembro, 200738 Projeto de classes startApp() pauseApp() destroyApp() ShipMidlet ShipController GameObject Ship Fire Enemy ShipGameScreen Constants run() setPaused() setGameOver() commandAction() loadGameObjects() update() paint() keyPressed() applySpeed() intersects() update() draw() update() draw() update() draw() MIDlet > CommandListener Runnable > * * Sprite >

39 Novembro, 200739 Antes de codificar, vamos ver… n Recursos de jogos do MIDP 2.0 – Fazer nosso GameObject herdar do Sprite de MIDP 2.0 – Usar colisão do sprite de MIDP2.0 – Usar GameCanvas  Usar tratamento de teclas usando getKeyStates()  Usar back buffer usando getGraphics()  Usar full screen – Adição de som (sugestão MIDI)

40 Novembro, 200740 Pacote Jogos MIDP 2.0 n MIDP 2.0 Packages: – javax.microedition.lcdui.game – Vide API  http://java.sun.com/javame/reference/apis/jsr118/ Layer TiledLayerSprite LayerManager GameCanvas * game Canvas lcdui Displayable GameObject

41 Novembro, 200741 Sprite Sprite s = new Sprite(image, frameWidth, frameHeight); s.move(10, 0); s.nextFrame(); s.setFrameSequence(new int[]{0, 1, 2, …, 1, 1, 1, 1}); s.nextFrame();

42 Novembro, 200742 Constants n Comandos do jogo n Características dos objetos – Declarar frame sequences (exercício) n Características do aparelho (largura e altura da tela) n Imagens usadas pelos objetos n Método para carregar as imagens (loadImages())

43 Novembro, 200743 ShipMidlet n Possui referência para a tela principal do jogo n Possui referência para o controlador do jogo n Inicializa os objetos acima no startApp() n Inicializa o looping do jogo no controlador n Mostra a tela do jogo

44 Novembro, 200744 ShipController n Thread que contêm o looping do jogo n Trata todos os comandos “alto nível”do jogo n Controla o estado de pause/resume do jogo (lembrar que não tem relação com o pauseApp())

45 Novembro, 200745 GameObject n Herda de javax.microedition.lcdui.game.Sprite – Posição x e y na tela – Altura e largura – Frame sequence para controlar as animações – Representação gráfica (método paint()) – Detecção de colisão n Estende com – Velocidades horizontal e vertical – Método abstrato update() n Responsabilidades das subclasses: Ship, Enemy e Fire – Inicializar frame sequences nos construtores e nas mudanças de estado das classes – Fazendo isso, não é necessário especializar o método paint(), ou seja, a lógica de renderização é reusada.

46 Novembro, 200746 Ship n É um GameObject n Array de balas n Indicação se a nave está explodindo n Inicializar frame sequences nos construtores e nas mudanças de estado das classes n Métodos para mover a nave n Método pra disparar balas

47 Novembro, 200747 Fire n É um GameObject n Tratamento ao sair da tela n Atualiza a posição, dada a velocidade

48 Novembro, 200748 Enemy n É um GameObject n Possui um comportamento ingênuo (randômico) n Indicação se a nave está explodindo n Inicializa os frame sequences nos construtores e nas mudanças de estado das classes (exercício)

49 Novembro, 200749 ShipGameScreen n Inicializa e possui todos os objetos do jogo (Nave, Inimigos e Balas) (exercício) n Centraliza a atualização dos estados dos objetos (exercício) n Controla colisão de balas com inimigos n Controla colisão de inimigos com a nave (exercício) n Renderiza todos os objetos (exercício) n Controla e pinta informações do jogo (pontuação, level e vidas) n Trata pressionamento das teclas (esquerda,direita e fire) (exercício)

50 Novembro, 200750 BUILD & RUN!

51 Novembro, 200751 Deploy n “Over the Air” (OTA) n Cabo serial n Infra vermelho MIDLet server descoberta instalação execução Atualização remoção confirmação checagem jad jad’ JAR

52 Novembro, 200752 Melhorias n Adição de splash screen n Adição de menu n Melhorar tela de game over n Tabela com recordes (RMS) n Background com scrolling n Chefe de fase n Coleta de itens (campo de força, diferentes tiros, etc) n Tipos diferentes de inimigos n I.A dos inimigos n Upload de pontuação

53 Novembro, 200753 Melhorias no uso de MIDP 2.0 n Outros recursos de jogos do MIDP 2.0 – Usar GameCanvas  Usar tratamento de teclas usando getKeyStates()  Usar back buffer usando getGraphics()  Usar full screen – Adição de som (sugestão MIDI)

54 Novembro, 200754 Otimize, se necessário n Obfuscadores para diminuir tamanho de código – Proguard, Retroguard, etc. n Cautela no uso de herança e excesso de classes n Evite usar classes anônimas ou aninhadas n Acessos a variáveis estáticas e métodos estáticos é mais rápido n Arrays no lugar de Vectors n Loops de trás pra frente (comparação com 0,null e false é mais rápida) n Reuse objetos n Cuidado no uso de Strings

55 Novembro, 200755 Otimização (cont.) n Combine várias imagens em uma só n Número de cores das imagens n Uso do Clip pra pintura n Preocupações – Tamanho do Jar (64k ~ 150k) – Memória (200k ~ 1 Mb) – Processamento (5 fps ~ 12 fps) 1 PNG 0.7k 4 PNG 1.6k

56 Novembro, 200756 Um pouco mais sobre porte n Importância do porte – Boa parte do desenvolvimento (~ 40%) – Pensar no porte desde o projeto do jogo n Exemplos de variações – Tamanho de tela – API de som – Versão API (MIDP 1.0 ou 2.0, etc) – Bugs do celular – Vários idiomas – Funcionalidades do jogo – etc… n Escala – Chega-se a gerar +2000 versões de uma aplicação

57 Novembro, 200757 Boas práticas para o porte n Manter código único – Pré-processamento //#ifdef  http://antenna.sourceforge.net/ http://antenna.sourceforge.net/  http://eclipseme.org/index.html http://eclipseme.org/index.html – Aspectos  Pesquisa acadêmica n Sistemas de build – Responsável por gerar as várias versões da aplicação – Pré-processa código antes de compilar – Gerencia resources: seleciona arquivos (imagens, sons, etc) por versão – Empacota tudo gerando executáveis (jar e jad) – http://ant.apache.org/manual/ http://ant.apache.org/manual/

58 Novembro, 200758 Dicas finais n Sites interessantes – http://www.forum.nokia.comwww.forum.nokia.com – http://www.motocoder.comwww.motocoder.com – http://wireless.java.sun.com http://wireless.java.sun.com – http://www.microjava.com http://www.microjava.com – http://www.midlet-review.com http://www.midlet-review.com n Listas de discussão – kvm-interest – j2me-brasil

59 Novembro, 200759 Obrigado! Dúvidas, questionamentos ou aflições... tarcisio.camara@meantime.com.br

60 Novembro, 200760 Sprite defineReferencePixel(76, 23) setTransform(Sprite.TRANS_…) defineReferencePixel(25, 3)


Carregar ppt "Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara Geber Ramalho"

Apresentações semelhantes


Anúncios Google