Minicurso: Android com Java - Jogos Bem Vindos!
Minicurso: Android com Java - Jogos Organização Capítulo I Uma Nova Linguagem Motivação Programação Java com Eclipse AndroidOS
Minicurso: Android com Java - Jogos Organização Capítulo II O Android Contra-Ataca Diretrizes gerais Elementos de um jogo Sprites e Texturas Física Efeitos Mapas Áudio Input Implementando os elementos em Android
Minicurso: Android com Java - Jogos Organização Capítulo III O Retorno de Java Utilizar o conhecimento da Aula 2 Desenvolver um jogo simples Shooter
Minicurso: Android com Java - Jogos Organização Capítulo I Uma Nova Linguagem Motivação Programação Java com Eclipse AndroidOS
Java / Android - Motivação Google Play Store Visibilidade Monetização Distribuição Suporte Oficial, via APIs Comunidade Nova IDE: Android Studio (early access preview) http://developer.android.com/distribute/index.html
Java / Android - Motivação Problemas: Pirataria Tamanho de Telas (e Resoluções) Versionamento
Minicurso: Android com Java - Jogos Organização Capítulo I Uma Nova Linguagem Motivação Programação Java com Eclipse AndroidOS
Java / Android Programação Java Finally some action! Prática: Hello World com Eclipse / ADT! Abrir Eclipse com o Plugin ADT Criar um projeto de Java
Java / Android Programação Java Código para Hello World: public class MinhaClasseFeliz { public static void main(string args[]) { System.out.println("Hello, World!"); } } Ok, o que acabamos de fazer?
Java / Android Programação Java Um pouco de Java... Programa.java COMPILADOR ByteCod e Programa.class you are here JVM JVM JVM... Binary Binary Binary * Windows Linux
Java / Android Programação Java Um pouco de Java Não trata BINÁRIO; trata BYTECODE Linguagem Orientada a Objetos Executa em uma JVM (Java Virtual Machine) Write once, run everywhere
Java / Android Programação Java Um pouco de Java Compilador + Bibliotecas = JDK (Java Development Kit) Diversas IDEs (Integrated Development Environment) disponíveis, mas usaremos o Eclipse Free Suporte oficial via ADT Fácil configuração para Máquina Virtual ou Device para testes e execução do software Aceita (e possui) diversos plugins úteis (e inúteis também)
Java / Android Programação Java Mais um pouco Orientação a Objetos Uma classe equivale a algo no mundo real Instâncias de uma classe são diferentes aparições desse algo Cada classe é definida com propriedades e ações que caracterizam e modificam uma instância (ou não)
Java / Android Programação Java Mais um pouco Orientação a Objetos Alguns princípios e regras Information Hiding: Esconder o acesso direto às variáveis internas. Usar métodos que abstraem o acesso e a modificação. Mapeação Direta: Cada classe representa somente um elemento do mundo real. Interfaces: Usar Interfaces sempre que possível. Porém, mantê-las o mais sucinta possível.
Java / Android Programação Java Mais mais um pouco Cada.java define somente UMA Classe Código organizado por Packages Em cada Package, vários.java
Java / Android Programação Java Mais mais um pouco Programação implementando Classes Interface: define os métodos, mas não implementa! Também pode definir constantes. Definido num.java separado de sua implementação. Classe: pode implementar uma interface ou ser autônoma. Possui a definição e implementação de todos os métodos e variáveis utilizadas pela classe. Caso implemente uma interface, deve importar o.java correspondente. Lembre-se: 1.java = 1 classe OU 1 interface
Java / Android Programação Java Mais mais um pouco Programação implementando Classes Criando Interfaces: [modificadores] Interface NomeDaClasse [extends Interface]* { [definições] } Criando classes: [modificadores] Class NomeDaClasse [extends, implements Classe]* { [definições / implementações] } Instanciando classes (criando Objetos): vari = new NomeDaClasse( [argumentos] ); Chama construtor!
Java / Android Programação Java Mais mais mais um pouco Programação elementos importantes Definição: Variáveis: [modificadores] tipo nome_variável Métodos: [modificadores] tipo_retorno nome_método([argumentos]) Bloco: { [código] } (Alguns) Modificadores: private, public, protected, static, final
Java / Android Programação Java Modificador Classe Package Subclasses Mundo public Sim Sim Sim Sim protected Sim Sim Sim Não -oculto- Sim Sim Não Não private Sim Não Não Não Outros modificadores: static: variável / método independe da instância final: variável só pode ser modificada uma vez (constante)
Java / Android Programação Java Mais mais mais mais um pouco Programação elementos importantes Controle: Condição: if ( [exp booleana]) Laços: for ([ini]; [check]; [inc]) { [código] }; for (Tipo var : oarray) { [código] }; while ([exp booleana]) { [código] }; do { [código] } while ( [exp booleana] );
Java / Android Programação Java Mais mais mais mais mais um pouco Programação algumas convenções de programação Classes e Arquivos: UmaClasseOuArquivo Métodos: ummétodo( [argumentos] ) Variáveis: umavariável Constantes: UMA_CONSTANTE Usem nomes do que faz, não como faz Um código é mais lido que escrito Testem!
Java / Android Programação Java Mais mais mais mais mais mais mais mais mais mais mais... OK, CHEGA! Vamos a um exemplo...
Java / Android Programação Java Mapa de Classes para nosso Jogo Shooter Como abstrair? Que elementos utilizaremos? Algum elemento pertence a outro? Algum elemento é uma especialização de outro? Dica: montar o Mapa de Classes antes da implementação!
Java / Android Programação Java Informações necessárias de um Personagem Posição Pontuação Vida Ações necessárias de um Personagem Andar Atirar Dano / Morrer
Java / Android Programação Java Possível implementação de Dados: Posição: dois inteiros (X e Y) Pontuação: inteiro Vida: inteiro que varia de 0 a 100. Se == 0 morre Porém! Lembre-se dos princípios de Orientação a Objetos! Deixar as informações escondidas e usar funções para recuperar quando necessário. Usar funções que abstraem o significado de cada variável para modificação = GETTERS e SETTERS
Java / Android Programação Java Exemplo de Interface e Classe para uma classe Personagem: public interface IPersonagem { public int getpositionx(); public int getpositiony(); public void movetox(int newx); public void movetoy(int newy); public void shoot(); public void addscore(int addedscore); public int getscore(); public void damage(int damageamount); public int gethealth; } Lembre-se: Interfaces só definem os métodos (ações) ou constantes!
Java / Android Programação Java Classe: public class Personagem implements IPersonagem { private int posx, posy; private int sideturned; private int health; public Personagem() { [código] } public int getpositionx() { [código] } public int getpositiony() { [código] } public void movetox(int newx) { [código] } public void movetoy(int newy) { [código] } public void shoot() { [código] } public void addscore(int addedscore) { [código] } public int getscore() { [código] } public void damage(int damageamount) { [código] }
Classe: Java / Android Programação Java public class Personagem implements IPersonagem { private int posx, posy; propriedades private int sideturned; (properties) private int health; public Personagem() { [código] } public int getpositionx() { [código] } public int getpositiony() { [código] } construtor (constructor) public void movetox(int newx) { [código] } public void movetoy(int newy) { [código] } public void shoot() { [código] } métodos (métodos) public void addscore(int addedscore) { [código] } public int getscore() { [código] } public void damage(int damageamount) { [código] }
Java / Android Programação Java Outro exemplo: Item public interface IItem { public String getname(); public String setname(string newname); public String getinfo(); public String setinfo(string newinfo); public int getpositionx(); public int getpositiony(); public void setpositionx(int newposx); public void setpositiony(int newposy); }
Java / Android Programação Java public class Item implements IItem { private String name, info; private int posx, posy; public Item() { } public String getname() { } public String setname(string newname) { } public String getinfo() { } public String setinfo(string newinfo) { } public int getpositionx() { } public int getpositiony() { } public void setpositionx(int newposx) { } public void setpositiony(int newposy) { } } Essa Classe está correta? Vou trocar o Nome com frequência? Vou trocar eventualmente? Vou trocar a Informação com frequência? Vou trocar eventualmente?
Java / Android Programação Java public interface IItem { public String getname(); public String getinfo(); public int getpositionx(); public int getpositiony(); public void setpositionx(int newposx); public void setpositiony(int newposy); } public class Item implements IItem { private String name, info; private int posx, posy; public Item(String nome, String info) { } public String getname() { } public String getinfo() { } public int getpositionx() { } public int getpositiony() { } public void setpositionx(int newposx) { } public void setpositiony(int newposy) { } } Lembre-se: cada um desses códigos pertence a um arquivo.java SEPARADO
Java / Android Programação Java E se quiséssemos outros tipos de informações? Listas (itens que possui) Enumeráveis (estados: morto,vivo,imortal) Texturas / Imagens (uma sprite para o jogador) O Java (+ bibliotecas Android) possui algumas soluções: Listas ArrayList<tipo> Enumeráveis enum Texturas / Imagens bitmap (!=.bmp)
Java / Android Programação Java Expandindo Classes Temos duas classes usáveis: Personagem e Item Incompletas! Vamos colocar mais informações e ações! Usar os tipos discutidos + pesquisa na Internet para adicionar as seguintes informações: Adicionar informação de custo em moedas em um Item Definir uma variável de estado enumerável que representa o estado atual do personagem (normal, imortal, morto) Criar uma variável que contenha todos os Item que um Personagem possui
Minicurso: Android com Java - Jogos Organização Capítulo I Uma Nova Linguagem Motivação Programação Java com Eclipse AndroidOS
Java / Android Android O Sistema Operacional Android é um Linux com múltiplos usuários onde cada app é um usuár Cada processo possui sua própria Virtual Machine Data sharing é possível com: Ter dois processos com mesmo ID Adicionar permissions no app Seguro! Um aplicativo Android não possui exatamente uma main
Java / Android Android you are here
Java / Android Android Um app pode possuir 4 tipos de componentes Activities* Services Content Providers Broadcast Recievers
Java / Android Android Activities Janela de Desenho (tela inteira ou não) Cada aplicativo pode ter diversas activities Cada activity deve ser o mais independente das de mais possível Geralmente é definido uma activity para ser a main activity É possível abrir activities de outro app, caso seja explicitamente definido assim Pode possuir subelementos: Fragments e Loaders
Lifecycle: Java / Android Android Activities
Java / Android Android Activities Recriação de Atividades Sistema matou um aplicativo hidden Salva e recupera estado atual com um bundle
Java / Android Android Activities Ordem de chamada para Atividade A: Para criação: oncreate(), onstart(), onresume() Para destruição: onpause(), onstop(), ondestroy() Pausar: onpause() Retomar: onresume() Esconder: onpause(), onstop() Abrir novamente: onrestart(), onstart(), onresume() Abrir nova atividade B: A.onPause(), B.onCreate(), B.onStart(), B.onResume(), A.onStop(
Java / Android Android Activities Activities se organizam em Tasks Geralmente, 1 task = 1 app Cada task possui uma Back Stack
Java / Android Android Services Faz operações no background Uma vez começada, não necessariamente pára se o usuário trocar de app Podem ser independentes ou bind (activities, services, content providers) Por default, executa na main thread do app que o iniciou Executa sempre somente uma instância
Java / Android Android Content Providers Cuidam do acesso a estruturas de dados entre apps Não explicitar nada ninguém acessa os dados de seu app Usado para pegar dados do sistema (como a lista de contatos)
ava / Android Android Broadcast Reciever Responde a anúncios feitos que ecoam pelo sistema Exemplos de anúncios: Tela desligada Bateria baixa Ligar / Desligar aparelho Geralmente, fazem executar outro componente
Outros elementos importantes: Views Threads Listeners Intents Java / Android Android
Java / Android Android Views UI completa e nativa Diversos componentes prontos para uso Fácil de estender
Java / Android Android Threads Unidade de execução básica de uma instância de VM Cada app possui uma main thread Podem ser criadas novas threads para trabalhos específicos Problema: sincronização Ex: carregar assets de um jogo enquanto desenha uma animação
Java / Android Android Listeners São interfaces do View com um único método de callback Chamado quando o View designado sofrer algum evento O evento depende do tipo de Listener onclick() OnLongClick() Genérico
Java / Android Android Intents Mensagens ou Chamadas de Sistema Estrutura de Dados que possui uma descrição abstrata da operação a ser feita (ou já feita) Intent filters definem o que uma activity, service e broadcast reciever podem receber como inte
Java / Android - Android Novo Projeto Criar novo Android Project Partes importantes de um projeto Como usar o Eclipse Criando uma UI Criando e Usando uma Máquina Virtual
Java / Android Android Partes importantes de um projeto: Manifest (xml) R (java) Sources Layout Strings