novembro, 20071 projeto conceitual de jogos tarcisio camara...
TRANSCRIPT
![Page 1: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/1.jpg)
Novembro, 2007 1
Projeto Conceitual de Jogos
Tarcisio [email protected]
Geber [email protected]
Tarcisio [email protected]
Geber [email protected]
Desenvolvendo Jogos em Java ME para celulares
Aula 1Introdução à Java ME
![Page 2: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/2.jpg)
Novembro, 2007 2
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
![Page 3: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/3.jpg)
Novembro, 2007 3
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
![Page 4: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/4.jpg)
Novembro, 2007 4
Ciclo de desenvolvimento deve ser rápido (<6 meses)
Retorno do investimento lento
Mercado: Cadeia de Valor
Technology
Brands Developer Carrier
Mobile PortalPublisher End-user
Mobile PortalPublisher
Fluxo de produção >>>
<<< Fluxo de receita (R$)
![Page 5: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/5.jpg)
Novembro, 2007 5
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
![Page 6: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/6.jpg)
Novembro, 2007 6
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
![Page 7: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/7.jpg)
Novembro, 2007 7
Telefones Java (>650 dispositivos)http://developers.sun.com/techtopics/mobility/device/pub/device/list.do
20
disp
ositiv
os
por p
ágin
a
![Page 8: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/8.jpg)
Novembro, 2007 8
Introdução a plataforma J2ME
SERVIDOR
DESKTOP
SMART-CARDS
CELULARES
![Page 9: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/9.jpg)
Novembro, 2007 9
Arquitetura Java ME
Device Hardware
Host Operating System
Configuration:
Profiles
LibrariesKVM
Application
![Page 10: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/10.jpg)
Novembro, 2007 10
Universo Java ME Hoje… Java Community Process (JCP) Java Specification Request (JSR)
http://java.sun.com/javame/technology/jcp.jsp
![Page 11: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/11.jpg)
Novembro, 2007 11
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
![Page 12: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/12.jpg)
Novembro, 2007 12
CLDC 1.0 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
Target Devices– Celulares
– Two Way Pagers
– Personal Organizers
– etc.
![Page 13: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/13.jpg)
Novembro, 2007 13
Escopo do CLDC 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…)
![Page 14: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/14.jpg)
Novembro, 2007 14
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
![Page 15: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/15.jpg)
Novembro, 2007 15
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
![Page 16: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/16.jpg)
Novembro, 2007 16
Pacotes do CLDC Herdados do J2SE
– java.lang– java.io– java.util
Específicos do CLDC– javax.microedition.io
![Page 17: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/17.jpg)
Novembro, 2007 17
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)
![Page 18: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/18.jpg)
Novembro, 2007 18
MIDPMobile 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 128 Kb
Tela 96x54 - 2 cores
Entrada Teclado e/ou touch screen
Conectividade HTTP 1.1
Som Não exigido Tons, WAV, MIDI
![Page 19: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/19.jpg)
Novembro, 2007 19
Pacotes do MIDP 1.0MIDP Packages:
–javax.microedition.midletjavax.microedition.midlet.MIDlet
–javax.microedition.lcdui
–javax.microedition.rmsjavax.microedition.rms.RecordStore
![Page 20: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/20.jpg)
Novembro, 2007 20
Pacotes adicionais do MIDP 2.0MIDP 2.0 Packages:
–javax.microedition.mediajavax.microedition.media.Playerjavax.microedition.media.Control
–javax.microedition.media.controljavax.microedition.media.control.VolumeControl
–javax.microedition.lcdui.game
–javax.microedition.iojavax.microedition.io.PushRegistry
Layer
TiledLayer Sprite
LayerManager
GameCanvas
*
game
Canvas
lcdui
Displayable
![Page 21: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/21.jpg)
Novembro, 2007 21
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).
![Page 22: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/22.jpg)
Novembro, 2007 22
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
![Page 23: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/23.jpg)
Novembro, 2007 23
Ciclo de vida dos MIDlets
![Page 24: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/24.jpg)
Novembro, 2007 24
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.AloMIDletMIDlet-Name: Alô Mundo!MIDlet-Vendor: C.E.S.A.RMIDlet-Version: 1.0MIDlet-Jar-Size: 7808MIDlet-Jar-URL: HelloExamples.jar
![Page 25: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/25.jpg)
Novembro, 2007 25
Passos para o desenvolvimento
11 22 33
44 55 66
![Page 26: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/26.jpg)
Novembro, 2007 26
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
![Page 27: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/27.jpg)
Novembro, 2007 27
Nosso ambiente... Eclipse Europa (3.3) for Java Developers
Eclipseme plugin 1.7.6
Sun Java Wireless Toolkit for CLDC (WTK) 2.5.2
![Page 28: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/28.jpg)
Novembro, 2007 28
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
![Page 29: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/29.jpg)
Novembro, 2007 29
Dica: Esteja com a API ao alcance...http://java.sun.com/javame/reference/apis/jsr118/
![Page 30: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/30.jpg)
Novembro, 2007 30
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
![Page 31: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/31.jpg)
Novembro, 2007 31
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
![Page 32: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/32.jpg)
Novembro, 2007 32
Projeto Conceitual de Jogos
Tarcisio [email protected]
Geber [email protected]
Tarcisio [email protected]
Geber [email protected]
Desenvolvendo Jogos em Java ME para celulares
Aula 2Prática de jogos em
Java ME
![Page 33: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/33.jpg)
Novembro, 2007 33
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
![Page 34: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/34.jpg)
Novembro, 2007 34
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
![Page 35: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/35.jpg)
Novembro, 2007 35
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)
![Page 36: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/36.jpg)
Novembro, 2007 36
Nosso Jogo! 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.”
![Page 37: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/37.jpg)
Novembro, 2007 37
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)
![Page 38: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/38.jpg)
Novembro, 2007 38
Projeto de classes
startApp()pauseApp()destroyApp()
ShipMidlet
ShipController
GameObject
Ship
Fire
Enemy
ShipGameScreen Constantsrun()setPaused()setGameOver()commandAction()
loadGameObjects()update()paint()keyPressed()
applySpeed()intersects()update()
update()draw()
update()draw()
update()draw()
MIDlet
<<extends>><<extends>>
<<extends>>
<<extends>>
CommandListener
Runnable
<<implements>>
<<implements>>
*
*
Sprite
<<extends>>
![Page 39: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/39.jpg)
Novembro, 2007 39
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)
![Page 40: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/40.jpg)
Novembro, 2007 40
Pacote Jogos MIDP 2.0MIDP 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
![Page 41: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/41.jpg)
Novembro, 2007 41
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();
![Page 42: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/42.jpg)
Novembro, 2007 42
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())
![Page 43: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/43.jpg)
Novembro, 2007 43
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
![Page 44: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/44.jpg)
Novembro, 2007 44
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())
![Page 45: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/45.jpg)
Novembro, 2007 45
GameObject 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
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.
![Page 46: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/46.jpg)
Novembro, 2007 46
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
![Page 47: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/47.jpg)
Novembro, 2007 47
Fire É um GameObject Tratamento ao sair da tela Atualiza a posição, dada a velocidade
![Page 48: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/48.jpg)
Novembro, 2007 48
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)
![Page 49: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/49.jpg)
Novembro, 2007 49
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)
![Page 50: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/50.jpg)
Novembro, 2007 50
BUILD & RUN!
![Page 51: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/51.jpg)
Novembro, 2007 51
Deploy “Over the Air” (OTA) Cabo serial Infra vermelho
MIDLet server
MIDLet server
descoberta
instalação
execução
Atualização
remoção
confirmaçãochecagem
jadjad
jad’jad’
JAR
JAR
![Page 52: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/52.jpg)
Novembro, 2007 52
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
![Page 53: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/53.jpg)
Novembro, 2007 53
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)
![Page 54: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/54.jpg)
Novembro, 2007 54
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
![Page 55: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/55.jpg)
Novembro, 2007 55
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
![Page 56: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/56.jpg)
Novembro, 2007 56
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
![Page 57: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/57.jpg)
Novembro, 2007 57
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/
![Page 58: Novembro, 20071 Projeto Conceitual de Jogos Tarcisio Camara tarcisio.camara@meantime.com.brarcisio.camara@meantime.com.br Geber Ramalho glr@cin.ufpe.br](https://reader036.vdocuments.com.br/reader036/viewer/2022062404/552fc142497959413d8df608/html5/thumbnails/58.jpg)
Novembro, 2007 58
Dicas finais Sites interessantes
– 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