Aula 1 Introdução à Java ME

Slides:



Advertisements
Apresentações semelhantes
Faculdades Integradas Santa Cruz
Advertisements

Java e OO – Isso é só um roteiro de aula
Lógica de programação de jogos
Programação em Java Prof. Maurício Braga
Java Básico Arrays Marco Antonio, Arquiteto de Software – TJDF Atualizado: Fevereiro/2009.
Programação para dispositivos móveis
Programação para dispositivos móveis 2º Semestre 2009 > PUCPR > Design Digital Bruno C. de Paula.
Programação para dispositivos móveis 2º Semestre 2009 > PUCPR > Design Digital Bruno C. de Paula.
Iniciando na plataforma Eclipse
Apostila para o 7º ano Profª Yandra
Introdução à Computação para o Ensino Médio
Gestão de telas e ambientes em jogos 2D
April 05 Prof. Ismael H. F. Santos - 1 Modulo II CheckStyle Professor Ismael H F Santos –
Arrays Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein) Arrays Exercícios.
Programação Concorrente
POWER POINT O POWER POINT é um editor de apresentações, pertencente ao
Interfaces gráficas e Interfaces Web
Classes e objetos Modelagem
Tecnologias para Internet
7 - Criação de Páginas Web
Desenvolvimento para Dispositivos Móveis
Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira
Mobile Agilidade e organização da frente de vendas e prestação de serviços através de Tablets e SmartPhones.
Marcelo Korjenioski. Venda crescente de dispositivos com sistema operacional Android em 2011 favorecem o desenvolvimento para a plataforma. Jogos casuais.
Concorrência em Java Threads em Java.
Introdução a programação (if669cc)
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Aula prática 13 Orientação a Objetos – C++ Parte 1
XNA Framework Raphael Barros.
Recuperação de Informação usando o Apache Lucene
Conceitos básicos de orientação a objetos
Estrutura de dados, pseudocódigo
J2ME Mini Curso.
G AME API. Conjunto com 5 classes que simplificam o desenvolvimento de jogos 2D Provêem 2 importantes funcionalidades GameCanvas Estruturação do jogo.
Programação I Aula 2 (Métodos)
Lógica de Programação de Jogos
Computação Musical e Processamento de Som – 06.1
Programa Expresso de Capacitação Módulo J2ME Aula 4 – Interface de alto e baixo nível.
Jornada de Cursos – J2ME Aula 2 – Configuração.
MoSOA Vítor Braga – Marcelo Amorim – Pedro Lages –
Programa Expresso de Capacitação Módulo J2ME Aula 1 – Overview e Conceitos básicos.
DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 FORMADOR Gonçalo Miguel MÓDULO 25. Introdução ao ActionScript 3.0.
Aula 1 - Fundamentos Java SE Instituto Metodista Izabela Hendrix Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Gilmar Medeiros – Agosto/2009.
Luiz Antonio Torres, Maio/2014
Linguagem de Programação JAVA
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
TV digital Funcionamento Comparativo com a TV Analógica
MINI CURSO J2ME Vinícius Maran SEMINÁRIO REGIONAL DE INFORMÁTICA 2008.
Introdução às Java Threads
Java Kickstart, day 2 Semelhanças com linguagem C.
MINI CURSO J2ME Vinícius Maran SEMINÁRIO REGIONAL DE INFORMÁTICA 2008.
Projeto Arte, Ciência e Tecnologia
Herança e Polimorfismos
O que você está construindo
Linguagem I Strings.
Linguagens de Programação II
Flash CS5 Renato Rodrigues Mestieri. Empresas x Internet Tipos de sites: Institucionais Portais Institucionais (estáticos) Portais Dinâmicos (o que é.
Aguilar Figueira Dias Orientador Prof. Dr. João Bosco da Mota Alves
Otimizando Compiladores de AspectJ para Java ME Fernando Henrique Calheiros Lopes Centro de Informática – UFPE.
16 de Setembro, Projeto Conceitual de Jogos Saulo Souto Geber Ramalho Saulo Souto
Linha de Produção de Jogo Móveis Danilo Cavalcanti Torres - dct.
18 de setembro, Projeto Conceitual de Jogos Saulo Souto Geber Ramalho Saulo Souto
Adriano Marcos Petrônio
Módulo II Capítulo 1: Orientação a Objetos
Seminários.reply Introdução a JavaME Guilherme Carvalho.
Array e ArrayList LPOO – 01/09/14.
Flash 1 O Flash foi desenvolvido inicialmente com outro nome (Future Splash Animator), a Macromedia comprou o FutureSplash, mudou seu nome para Flash.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

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

Sobre quem vos fala... 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 Um dos pioneiros mundiais (desde 2001) na tecnologia J2ME Várias tecnologias wireless: J2ME, BREW, WAP, SMS e MMS Atualmente, distribui jogos para EUA, Europa e alguns países da América Latina e Ásia Parceria com diversos fabricantes, publishers e operadoras Produzimos mais de 40 jogos para celulares (alguns para a Motorola, Sony Ericsson, etc) Atua como publisher no Brasil, com parceria com todas as operadoras

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

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

Mercado: Visão geral 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 Modelo de negócios padrão: revenue share em cima das vendas das operadoras para os usuários finais Mercando em processo de consolidação

Principais Tecnologias SMS/MMS Jogos baseados na troca de mensagens (forca, quiz, penalty, etc.) WAP/xHTML/iMODE Jogos baseados em páginas estáticas (velha, pedra papel tesoura, etc.) 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 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

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

Introdução a plataforma J2ME SERVIDOR DESKTOP CELULARES SMART- CARDS

Arquitetura Java ME Application Profiles Libraries Configuration: KVM Host Operating System Device Hardware

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

Configurações 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 Inclui um conjunto básico de classes Java É especificada pela JCP Connected Device Configuration (CDC) High end consumer devices PDA, TV set-top boxes, etc Connected, Limited Device Configuration (CLDC) Low end consumer devices Cell phones, limited PDAs, etc

CLDC 1.0 CLDC - Connected Limited, Device Configuration Target Devices 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 Target Devices Celulares Two Way Pagers Personal Organizers etc.

Escopo do CLDC Define: Não define: Linguagem Java e características da VM I/O Networking framework Segurança Internacionalização 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…)

Limitação do CLDC 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

Limitação do CLDC 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

Pacotes do CLDC Herdados do J2SE Específicos do CLDC java.lang java.io java.util Específicos do CLDC javax.microedition.io

Profiles 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 É especificada pela JCP O principal objetivo é garantir a interoperabilidade entre uma família de dispositivos. 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)

Teclado e/ou touch screen MIDP Mobile Information Device Profile (MIDP). 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.) Requisitos de Hardware MIDP 1.0 MIDP 2.0 Memória não volátil 128 Kb 256 Kb Memória volátil 32 Kb Tela 96x54 - 2 cores Entrada Teclado e/ou touch screen Conectividade HTTP 1.1 Som Não exigido Tons, WAV, MIDI

Pacotes do MIDP 1.0 MIDP Packages: javax.microedition.midlet javax.microedition.midlet.MIDlet javax.microedition.lcdui javax.microedition.rms javax.microedition.rms.RecordStore

Pacotes adicionais do MIDP 2.0 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 TiledLayer Sprite LayerManager GameCanvas * game Canvas lcdui Displayable

O que é um MIDlet É 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).

O que é um MIDlet (cont.) 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

Ciclo de vida dos MIDlets

MIDlet Suites e Descritores (JAD) 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) 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 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

Passos para o desenvolvimento 1 2 3 4 5 6

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

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

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

Dica: Esteja com a API ao alcance... http://java.sun.com/javame/reference/apis/jsr118/

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

Agora que vocês já estão craques… Vamos ao nosso Jogo!!! 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) Dicas de performance / Redução de código

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

Planejando um jogo 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 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

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

Planejando um jogo (cont.) 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)

Nosso Jogo! Shot´em up game simplificadíiiiiiiiiissimo!!  Analisamos tudo que foi falado e… Shot´em up game simplificadíiiiiiiiiissimo!!  “ 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.”

Já Temos as Características... Work! 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)

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

Antes de codificar, vamos ver… 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)

Pacote Jogos MIDP 2.0 MIDP 2.0 Packages: javax.microedition.lcdui.game Vide API http://java.sun.com/javame/reference/apis/jsr118/ Layer TiledLayer Sprite LayerManager GameCanvas * game Canvas lcdui Displayable GameObject

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

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

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

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

GameObject Herda de javax.microedition.lcdui.game.Sprite Estende com 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 Estende com Velocidades horizontal e vertical Método abstrato update() 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.

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

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

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

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

BUILD & RUN!

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

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

Melhorias no uso de MIDP 2.0 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)

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

Otimização (cont.) Combine várias imagens em uma só Número de cores das imagens Uso do Clip pra pintura 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

Um pouco mais sobre porte Importância do porte Boa parte do desenvolvimento (~ 40%) Pensar no porte desde o projeto do jogo 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… Escala Chega-se a gerar +2000 versões de uma aplicação

Boas práticas para o porte Manter código único Pré-processamento //#ifdef <symbol> http://antenna.sourceforge.net/ http://eclipseme.org/index.html Aspectos Pesquisa acadêmica 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/

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

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

Sprite setTransform(Sprite.TRANS_…) defineReferencePixel(76, 23)