Expresso para iPhone, iPad e iPod Touch foi apresentado no 13º Wireless Mundi em São Paulo

0

Posted by Jair Pereira | Posted in Uncategorized | Posted on 24-06-2013

No dia 19 de Junho de 2013 o Expresso para iPhone, iPad e iPod Touch foi apresentado no 13º Wireless Mundi, evento voltado para órgãos do governo possam definir e conhecer as estratégias abordadas por outros órgãos. Na parte da manhã do evento o tópico principal foi a mobilidade, e como os governos podem atuar diretamente para trazer melhorias aos cidadões.

Com o aumento do uso de dispositivos móveis no Brasil, os governos, em suas diferentes instâncias, começam a usar os recursos da mobilidade para melhorar a qualidade dos serviços prestados aos cidadãos. Mas, para que as aplicações se disseminem é necessário superar pelo menos dois desafios: melhorar a conectividade e a forma como o governo se comunica com os cidadãos. Essa foi a principal conclusão do debate sobre “O uso de dispositivos móveis e as aplicações em serviços de governo”, durante o 13º Wireless Mundi, realizado no dia 19/06/2013 pela Momento Editorial e voltado para gestores públicos.

Nas palestras técnicas, tive a oportunidade de explicar sobre o funcionamento da ferramenta que ajudei a desenvolver: Expresso para iPhone, iPad e iPod Touch. Uma solução móvel, lançada em novembro de 2012 na Celepar, que contempla Email, Agenda e Catálogo de Endereços Corporativo em um único aplicativo.

b09c615f1be7edcd28d93e29c99d3296
6b7cfd9d4a4fa5c222456aa9e4f3dc1d
eab90a001302bf52e4c15f5d763c04da
ecfbf7fc10ccbd394fcd5af268d9b92e
2f2a3b42f262f8ec9059e3b502c711ef
1b363e692662d7d688071816a5779874
478c4fae2455402e1eb6f3f9ecd3b0e6
NextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnail

Como foi o desenvolvimento do Rocket Plane – Parte 3

0

Posted by Jair Pereira | Posted in Aplicativos, Dicas | Posted on 28-05-2013

Desenvolver um jogo é um grande DESAFIO, você terá de aprender diversas ferramentas, trabalhar com diversas linguagens de programação, se preocupar com o áudio e gráficos, animações e marketing, etc…

Mas o que é a vida sem alguns bons desafios não é mesmo? É exatamente por estes motivos que eu gosto tanto de desenvolver jogos. O fato é que todos nós gostamos de DESAFIOS e para mim desenvolver um APP ou um Sistema/Site-Web já não estava mais sendo desafiador o suficiente em minha carreira. Portanto se você se considera um BOM programador e deseja melhorar cada vez mais como programador, eu acredito que você realmente deveria tentar fazer um jogo sozinho.

Atendendo a alguns pedidos de diversos desenvolvedores Brasileiros do grupo iPhoneDevBrasil (Se você é desenvolvedor mobile e AINDA não faz parte, faça parte deste do grupo), daqui para frente vou tentar detalhar de forma mais técnica os detalhes do jogo, as ferramentas que foram utilizadas e os problemas encontrados. Sinto muito se você que está lendo não é programador, e não entender alguns dos termos usados aqui, mas espero que este texto possa desmistificar um pouco o desenvolvimento de um jogo. Sinto muito mas o texto é grande, e não descobri outra forma de deixá-lo menor.

Caso você também tenha interesse, recomendo a leitura da entrevista ao site iPadDicas.com onde explico um pouco mais sobre a idéia do jogo e algumas das dificuldades de desenvolver jogos no Brasil.

Na minha opinião o mercado Brasileiro de Jogos realmente precisa de muitos incentivos, e fico muito feliz em ser um dos Brasileiros que pode de certa forma ajudar outros desenvolvedores. Por favor, deixe suas dúvidas nos comentários para que outros desenvolvedores também possam ler e compartilhar suas experiências.

Se você estiver pensando em fazer o seu jogo, pelo que eu tenho acompanhado os jogos recentemente, a maioria deles tem um conteúdo “mínimo” e se o seu jogo tiver menos do que isso então você estará em desvantagem… No meu ponto de vista a maioria dos jogos deve conter pelo menos as seguintes telas:

  • Tela Inicial: Com a logo do seu jogo, seu personagem e os botões que levam para as outras telas.
  • Tela de Créditos: Você provavelmente não vai conseguir fazer tudo sozinho, então dê o merecido crédito as pessoas que te ajudaram no processo.
  • Tela de Configurações: Permita a alteração de Idioma (Sem ter que sair do Jogo), Ligar/Desligar SOM, e outras preferências do seu jogo.
  • Tela de Ajuda: Opcionalmente você pode fazer uma fase como tutorial, mas não deixe de dar uma ajuda inicial.
  • Tela de Seleção de Fases: Caso seu jogo tenha fases, você também terá que contabilizar as estrelas para desbloquear as próximas fases.
  • Tela de Categoria de Fases: Caso seu jogo tenha MUITAS fases, é recomendável criar uma tela com as categorias das fases.
  • Tela de Seleção de Personagem: Caso seu jogo tenha mais de um personagem
  • Tela de Pause: Com no mínimo as opções de Sair, Reiniciar ou Continuar
  • Tela de Final de Fase: Com a pontuação, estrelinhas e tudo mais.
  • Tela de Pontuação ou Leaderboard: No iOS você poderá usar o GameCenter se preferir, e recentemente o Google lançou para o Android também um clone do GameCenter, também existem outros frameworks como o OpenFeint que recentemente foi descontinuado.
  • Tela de Mensagens: Tela para confirmação de mensagens, Continuar/Sair, o importante desta tela é manter o design do jogo. Parece estranho ter uma tela assim se você pode usar um Alerta do próprio iOS/Android não é mesmo? A idéia é não permitir que o jogador lembre-se que está em um iOS/Android senão ele pode apertar o botão HOME e sair do seu jogo.
  • Integração com Facebook: Permita ao usuário ganhar moedas quando fizer uma publicação no Facebook, mas não deixe ele fazer a publicação mais de uma vez.
  • Lojinha: Para os usuários poderem evoluir Itens ou comprar Moedas, você poderá dividir sua Lojinha em categorias (Moedas, Poderes, etc…) Aqui você também terá que se preocupar com banco de dados e segurança/criptografia, afinal você não quer nenhum usuário com jailbreak ganhando moedas sem fazer força não é mesmo?? Mas calma que eu conheço algo que pode te ajudar…
  • GamePlay: É o último, mas sem ele todos os outros itens perdem o sentido, aqui é aonde o jogo realmente acontece.

Esta NÃO é uma receita de bolo, faça isso e o seu jogo será um sucesso, até mesmo porque eu fiz isso e os meus jogos não tem sido um sucesso como o Angry Birds. Pode ser que o seu jogo não tenha nada dessas características, pode ser que seja muito mais simples do que todos esses tópicos, mas você provavelmente ira se deparar com esses tópicos.

Além destas telas, acredito que você também terá de se preocupar com outros itens:

  • SOM: Como reproduzir/parar uma música de fundo, como reproduzir um efeito sonoro (e não reproduzir ele repetidas vezes). Como pré-carregar um som na memória, para que ele seja reproduzido mais rapidamente quando você precisar.
  • INTERNACIONALIZAÇÃO: Como traduzir seu Jogo para diversos idiomas, como será feito e de que forma você deve programar para poder chegar até o fim sem surpresas, não deixe este item para o final defina seu “padrão” de internacionalização antes de começar o jogo. O NSLocalizedString (Função no iOS que faz a internacionalização) serve apenas para o cocos2d, no cocos2d-x você terá de desenvolver o SEULocalizedString. Ou você pode dar uma olhada nesta classe também: CCLocalizedString
  • ANIMAÇÕES: Como fazer animações de transição de telas ou de imagens/personagens.
  • SINGLETON: Você inevitavelmente precisará salvar alguns dados de execução do seu jogo em um objeto que seja Singleton, então aprenda o que é um Singleton e como fazer um (Apenas 1).
  • ENGINE DE FÍSICA: Todo jogo deve utilizar uma engine de física (a não ser que você queira desenvolver a sua). Para isso você terá de lembrar um pouco o que você aprendeu na escola sobre trigonometria, força, ação e reação, massa e peso. É incrível como agora essas coisas começam a fazer algum sentido.
  • RESOLUÇÃO DAS TELAS: Eu tive muitos problemas com diferentes resoluções em diferentes dispositivos, mas alguns colegas me informaram que nas versões mais recentes do cocos2d-x, já existe um suporte diferenciado as multi-resoluções, é muito importante definir como você irá trabalhar com esta característica no começo do seu projeto, para mais informações veja este artigo na wiki do cocos2d-x.

FRAMEWORK E FERRAMENTAS

 

Como eu já disse anteriormente, utilizei o Cocos2d-x e juntamente com eles também utilizei mais algumas outras ferramentas, mas primeiro gostaria de comentar sobre a política que eu tenho sobre versões.

Política de Versões

Quando eu comecei o projeto a mais de um ano atrás, o Cocos2d-x estava em um estágio inicial eu utilizei a versão 0.11 ALFA que na época era a versão atual do projeto, eu resolvi manter esta versão pois gastaria muito tempo para migrar para uma versão mais nova. Houveram mudanças significativas da versão ALFA para a versão de 2.0 (Atual do projeto, mudanças estruturais e de sintaxe dos métodos).

Esta é uma política minha, como não tenho muito tempo disponível, e o processo de migração e atualização para uma versão mais nova das ferramentas levaria muito tempo. Vale lembrar que o processo de migração de uma versão para outra não é simplesmente a atualização do código, implica também em re-testar toda a sua aplicação e adaptá-la para funcionar com esta nova versão. Pois uma versão pois mais nova que seja, também pode conter BUG’s.

Então optei por manter a minha versão que estava funcionando e ignorar as atualizações, importando para a minha versão apenas as correções de BUGs do Cocos2d-x e das outras ferramentas.

O ponto aonde quero chegar é que talvez alguns dos problemas que eu citarei aqui, já não sejam mais válidos para as versões atuais dessas ferramentas.

1) Framework Cocos2d-x

 

Não tenho o objetivo aqui de explicar o processo de instalação e configuração do Cocos2d-x, até mesmo porque o processo é bem longo e já está muito bem documentado na Internet: (Instalação e Configuração do Cocos2d-x no Mac.)

Muitas pessoas tem medo de mudar do Cocos2d para o Cocos2d-x, mas uma vez que você já conhece um framework você estará automaticamente conhecendo o outro, pois as mudanças entre ele são mínimas, e mais em termos de sintaxe do que de mudanças estruturais, com raríssimas exceções. Mas é claro que você terá que aprender as peculiaridades de cada linguagem.

Vale lembrar que são linguagens diferentes, no Cocos2d você terá que programar em Objective-C e no cocos2d-x a programação será em sua maioria C++, porém você ainda terá que programar as partes específicas de cada plataforma na sua linguagem original, ou seja, Objective-C para iOS e Java para Android.

 

Muito cuidado ao utilizar a classe CCUserDefault, que é a equivalente ao NSUserDefault do iOS. Uma semana antes de enviar o Rocket Plane, percebi que os dados não estavam sendo persistidos no Android quando eu fechava o Jogo e abria de novo os dados eram perdidos… Imaginem a minha cara de felicidade, eu tive que re-implementar esta função fazendo a JAIRUserDefault, que ficou um pouco lenta no Android… Mas uma função um pouco lenta que grave, ainda é melhor do que uma função rápida que não grave nada…

2) Box2d

 

A escolha pelo BOX2D e não pelo Chipmunk não foi uma escolha técnica, eu apenas optei pelo Box2d pois já tinha conseguido desenvolver um exemplo funcional no Box2d e comecei a me basear nele para continuar desenvolvendo, em nenhum momento eu cheguei a comparar as duas engines de física, eu apenas sabia que precisava aprender pelo menos uma delas. Outro ponto que me levou a optar pelo Box2d foi que a ferramenta LevelHelper já dava o suporte para ele, e deixava a interação com o Box2d meio que “transparente” para o programador.

Se você deseja aprender um pouco mais sobre o Box2d, leia o manual no site oficial : BOX2D.ORG e também dê uma olhada neste tutorial: Tutorial

3) CocosBuilder

 

O CocosBuilder é realmente FANTÁSTICO! Além de ser OPEN-SOURCE ele te facilita muito a vida na criação das telas de menus, seleção de fases, etc… Você consegue criar a interface de seleção de telas simplesmente arrastando e soltando, ele salva essas informações em um XML que deverá ser adicionado ao seu projeto, juntamente com uma classe que faz a leitura deste XML.

O problema é que quando comecei o projeto esta classe que fazia a leitura para o cocos2d-x simplesmente NÃO EXISTIA, Eu só tive o “simples” trabalho de copiar a classe do projeto COCOS2D que já funcionava e portar para C++, a leitura funcionava bem no iOS mas no Android ficava muito lento fazer o parser do XML, até que outra pessoa publicou no fórum uma classe que fazia esta leitura de forma mais rápida.

Mas calma que hoje o projeto do CocosBuilder já é totalmente suportado no COCOS2D-X e essa classe já vem como parte do pacote.

O CocosBuilder também não atendia na época a parte de animações de imagens rotacionando e animações em geral, eu tive que fazer tudo por código, atualmente pelo que pude acompanhar pela evolução da ferramenta agora ele está atendendo muito bem a essas animações, você configura todas as animações pela própria aplicação. FANTÁSTICO!

Entretanto o CocosBuilder não atende a criação de itens criados dinamicamente, como por exemplo os itens da sua Lojinha, você terá que criar e posicionar todas as imagens por código, ignorando a existência do CocosBuilder. Se você tiver um menu para selecionar fases, etc… Tudo que for dinâmico terá que ser feito via código.

4) SpriteHelper

 

O SpriteHelper e o LevelHelper também são outras ferramentas que parecem fazer mágica, elas te facilitam muito a vida, porém podem trazer muitos problemas chatos também…

As duas ferramentas são pagas, porém existe a versão FREE que exporta as imagens com marcá-dagua e pode servir como aprendizado. (Os preços não são muito caros para quem trabalha com desenvolvimento de jogos), Recentemente surgiu mais uma ferramenta chamada CodeHelper que eu ainda não tive tempo para conhecer melhor.

Sobre o SpriteHelper, o problema chato que tive com ele, foi o fato de não permitir a adição de uma outra imagem a um sprite que já existia, desta forma eu tinha que manter em pastas separadas todas as imagens exportadas e recriar de novo o arquivo do SpriteHelper quando precisava. Ele até adicionava a imagem mas não posicionava corretamente. Um BUG Bem chato, espero que já tenham melhorado isso…

Outro item é que as imagens exportadas pelo SpriteHelper também ficavam um pouco grandes em KB, um pouco antes da publicação do jogo, eu abri todas as imagens do SpriteHelper no Photoshop e salvei elas para Web e Dispositivos, em média uma imagem de 180KB reduziu para 140KB. Parece ser tão pouco 40 KB não é? Em termos de memória, pelo que pude verificar no código o COCOS2D-X transforma esses 40 KB em um varchar de BITS na memória. Ou seja a imagem original de 180KB por um período curto de tempo na memória é carregada como uma imagem de aproximadamente 1.5 MB. Se você estiver carregando várias ao mesmo tempo, seu App pode dar crash.

Você sabia que o iPod Touch é o dispositivo Apple com menor memória? Eu descobri essa semana, Se você ignorar esses 40 KB, então provavelmente seu jogo não irá rodar em um iPod Touch. O Fato é que mesmo com essa compressão o jogo não rodou em um iPod Touch 4 geração, então tive que partir para algo mais drástico, considerar que o iPod Touch de 4 geração com a Tela Retina era na verdade um iPhone 3GS sem tela retina, e carregar as imagens sem o sufixo “-hd”. Aí sim o jogo rodou (a versão nova vai pro ar essa semana).

5) LevelHelper

 

Na época que comecei o jogo, eu estava extremamente viciado no jogo JetPack Joyride, e encontrei um tutorial na internet que explica como fazer um jogo parecido com o JetPack: Parte 1,Parte 2, Parte 3, Parte 4, ou você pode baixar o código completo (Código Completo do Tutorial)

Hoje é inevitável não reparar as semelhanças do Rocket Plane com o Jetpack, não por serem o mesmo jogo, mas porque já fazem parte da mesma categoria de jogos: “endless-running”. Que tipo de jogos você gostaria de desenvolver, aqueles que você mesmo gosta de jogar não é mesmo?? Não tenha medo de reinventar a roda, quantos jogos Angry Birds LIKE você vê por aí?? Esteja disposto a fazer o seu jogo, e provar para si mesmo que é capaz, e se você não ficar rico com o seu jogo, pelo menos você APRENDEU e se divertiu fazendo ele.

Não pretendo entrar muito nos detalhes desta ferramenta, pois acredito que o próprio tutorial do Ray Wenderlich já dê conta do recado muito bem (O tutorial é em COCOS2D, mas pode ser portado facilmente para COCOS2D-X).

Entretanto existe um pequeno abismo entre seguir um tutorial e terminar um jogo de verdade, encontrei diversas dificuldades com o LevelHelper que eu não sei se conseguirei citar todas.

Admiro muito o trabalho do Bogdan Vladu (Criador do Level Helper), ele me deu suporte pelo fórum quando precisei e recomendo muito a utilização do LevelHelper pois sem ele eu estaria perdido.

  • O Level Helper foi feito para criar fases de jogos e não um jogo com uma única fase infinita:Quanto mais objetos tiver no seu jogo, maior será o tempo de carregamento do Level Helper, e mais lento ficará o processamento de todos os objetos pela engine de física. Isso é meio que óbvio, mas serve para demonstrar que o LevelHelper foi feito para fases pequenas não servirá para fases infinitas.

    Mas o que é um brasileiro sem o seu “jeitinho”?

    Eu pensei e tentei desenvolver várias alternativas para conseguir chegar ao ponto que eu queria, a primeira delas foi tentar carregar vários arquivos do LevelHelper numa mesma fase dinamicamente quando a primeira fase estivesse terminando, eu já começaria a carregar a próxima fase e removeria o arquivo antigo quando o usuário não mais estivesse vendo ele… (Não tentem fazer isso em casa) Essa estratégia chegou a funcionar por um tempo, mas reconheço que não foi a melhor idéia.

    No final eu consegui utilizá-lo fazendo alterações na própria classe de leitura do levelhelper, e também criando e posicionando os objetos durante a execução do jogo, e quando o player (avião) ultrapassava os objetos que ele não coletou, eu verificava se eles poderiam ser removidos da memória e os removia.

  • Travamentos do aplicativo: Não estranhe nem fique bravo se do nada o LevelHelper resolver fechar, esse é praticamente o comportamento normal da ferramenta. Hehehe… Estou brincando, mas hoje eu não vejo isso como uma coisa ruim, se você avaliar os benefícios que a ferramenta te trás, além disso, em todas as vezes que o LevelHelper travou nenhum dado foi perdido, só tive que abri-lo de novo e continuar de onde parei.
  • Problemas com o Parallax do Level Helper: O Parallax na programação de jogos é na verdade aquele cenário de fundo do jogo que fica girando enquanto o usuário está jogando… Eu tive problemas não com o funcionamento padrão do LevelHelper, mas justamente porque o meu jogo era específico nessa situação, o cenário tinha que acompanhar a câmera, e a câmera tinha que acompanhar o jogador. Portanto tive que fazer alterações significativas nas classes do LevelHelper para permitir que o cenário pudesse ter este efeito.

6) Project Soom.la

 

O Projeto Soom.la é um projeto OpenSource que visa facilitar a criação da sua “Lojinha”, ele já se preocupa com toda a questão da segurança e criptografia da base da dados, porém você deverá configurá-lo para garantir a segurança, alterando as chaves de criptografia nos arquivos de configuração. A documentação dele não é uma das melhores, então você terá que se virar um pouco sozinho pra entender como fazer.

Atenção que existem dois links:

  • http://soom.la: Aqui você pode criar sua LOJA através do simples envio dos asset’s e configuração dos purchases, o site gerará um arquivo .zip que você importará no seu projeto, já existem até mesmo layout pré-definidos, muito interessante para quem não quer gastar tempo aprimorando sua loja. Porém na minha opinião, na prática parecia mais como se eu estivesse rodando um app com phonegap dentro do meu jogo, e eu não queria passar essa sensação de navegador WEB para o usuário.
  • http://project.soom.la: Aqui você encontra quase todo o código fonte do Soom.la para cocos2d-x e até mesmo para outras plataformas (Só não encontra o código do gerador automático). Porém aqui você terá que construir no código todo a parte visual da sua LOJA e usar as classes do SOOM.LA para fazer a persistência de compras e produtos e a integração com as lojas no Android e iOS (O que já poupa um trabalho rasoável).

7) BMGlyph

 

Não existe muito segredo nessa ferramenta, ela gera Fontes personalizadas para serem usadas na sua aplicação, gera um único arquivo de sprite com todos os caracteres e um arquivo XML com o posicionamento X,Y de cada letra no sprite, esse já é um padrão conhecido e a classe para leitura desse XML já faz parte do próprio framework (CCLabelBMFont). Não tive problemas com esta ferramenta e recomendo.


8) Parse.com

 

O Framework Parse.com irá te facilitar a vida nas notificações por PUSH, e em outros aspectos do seu App, este framework já é muito reconhecido pelo mercado e recentemente foi comprado pelo Facebook (Espero que eles não acabem com o produto).

Também utilizei o Parse para a integração com o Facebook, ele automaticamente registra os usuários e sabe informar se eles são usuários novos ou não, desta forma você pode premiar moedas para os usuários do facebook somente uma vez. Mesmo que o usuário desinstale o App, e faça outra publicação no nome dele, ele não receberá moedas novamente, porque a conta dele já foi usada para receber moedas.

9) XCode

Usando o cocos2d-x, o XCode deverá ser sua ferramenta principal de desenvolvimento, Pois existem inúmeras vantagens em desenvolver usando o XCode, além do tempo de compilação ser menor, o simulador do iOS é muito mais rápido que o simulador do Android.

OBS: Para testar o Gameplay do seu jogo, não existe nada melhor que o Device, simuladores não serão capazes de reproduzir a experiência que um device proporciona além disso teste seu jogo em diferentes plataformas e diferentes versões destas plataformas.

10) Eclipse

 

O Eclipse é utilizado apenas para fazer a compilação do seu projeto para Android, seu projeto terá um shell script chamado build_native.sh que é o responsável por fazer a Cópia de todas as imagens (Resources) do projeto iOS para o projeto do Android. Este script também cria uma library “libgame.so” e o seu projeto android funciona como se fosse uma “CASCA” chamando essa LIBRARY que é o todo o código em C++ compilado.

Muitas pessoas desconhecem, inclusive desenvolvedores de Android, que o Android possui duas formas de compilar aplicativos, uma delas é utilizando o android-sdk que todos conhecem, a outra forma é utilizar o android-ndk que compila códigos em C++ e gera esta library, no script build_native.sh você deverá configurar a pasta de onde está o framework do android-ndk.

Tenha certeza de configurar seu projeto Android no eclipse para executar este arquivo build_native.sh toda vez que você for executar o projeto.
 

11 e 12) Adobe Photoshop e Ilustrator

 

Photoshop e Ilustrator dispensam comentários, como já citei anteriormente, o Design é uma das partes mais importantes do seu jogo e você terá que dominar essas ferramentas. Infelizmente Desenho é algo que é preciso ter o “DOM”, muitas vezes dominar uma ferramenta não te fará ser o super star do Design, mas acredito que a prática leve a perfeição e mesmo que você contrate alguém, aprender um pouco pode te ajudar a exportar imagens, fazer pequenos ajustes sem ter que ficar pagando, e a entender um pouco mais da complexidade de um desenho.

Se quiserem fazer o texto Bazinga, sigam este TUTORIAL.

Para começarem a aprender, eu recomendo visitarem o site: http://vector.tutsplus.com



 
 
Espero que tenham gostado do pequeno livro que escrevi, mas espero que eu possa ajudá-los de alguma forma e que venham as dúvidas. :D

5,000 Vezes, MUITO OBRIGADO!

0

Posted by Jair Pereira | Posted in Aplicativos | Posted on 17-05-2013

Em apenas 25 dias, o Rocket Plane conseguiu atingir os 5,000 Downloads… O meu outro jogo Chicken Heroes demorou mêses para conseguir chegar nessa mesma marca… Estou muito feliz com o resultado, Muito Obrigado a todos que fizeram o Download e estão se divertindo com o Rocket Plane…

Como foi o desenvolvimento do jogo Rocket Plane – Parte 2

0

Posted by Jair Pereira | Posted in Aplicativos, Dicas | Posted on 14-05-2013

Um pouco antes de começar o projeto, como eu já tinha sofrido bastante desenvolvendo meu outro jogo o Chicken Heroes. Desta vez eu resolvi começar direito, afinal eu já sabia (OU PENSAVA QUE SABIA) as dificuldades que iria encontrar no caminho. Então resolvi entrar em contato com um amigo William que também era programador, e perguntar se ele tinha interesse em fazer um jogo junto comigo.

O William não só aceitou como também já comprou no mesmo final de semana um macbook usado e um ipad novinho, e conseguiu contato com um designer o Flavio que também aceitou se juntar a equipe do Rocket Plane. Eu estava vendo aquele momento como o começo da minha empresa de Jogos. Começamos a definir o projeto, e como seriam os aviões, os obstáculos que eles iriam encontrar, etc… Fizemos em forma de texto um documento no Google Docs, onde todos compartilhavam e escreviam as coisas legais que poderíamos fazer no jogo. E começamos a nos reunir nos finais de semana em minha casa, onde montei um pequeno escritório com uma bancada pra colocarmos os notebooks.

Era tudo muito bonito, mas infelizmente nossa parceria não pode continuar porque não conseguiamos nos reunir todos os finais de semana por diversos motivos. O William acabou tendo que sair do projeto por problemas pessoais e o Flavio não podia todos os finais de semana e também não estava conseguindo fazer os desenhos durante a semana. Durante dois mêses tivemos no máximo 2 sábados reunidos no qual os 3 puderam estar juntos. Não houve brigas, discussões nem nada do tipo, apenas chegamos a conclusão que não daria certo porque não tinhamos como nos encontrar.

“Na primeira vez que você começar a tentar resolver um problema, as primeiras soluções que você terá são muito complexas, e a maioria das pessoas param por aí. Mas se você continuar, e conviver com o problema e descascar mais camadas da cebola fora, você pode muitas vezes chegar a algumas soluções muito elegantes e simples. A maioria das pessoas simplesmente não coloca o tempo ou a energia para chegar lá.”

Steve Jobs.

Desta forma como eu sou teimoso, eu resolvi continuar o projeto sozinho. O principal problema disso era que o projeto era GIGANTE para três pessoas, imaginem para uma…

A idéia principal se passava em uma escola, aonde as crianças iriam jogar os aviões de papel, e o avião percorreria vários cenários da escola, como por exemplo as salas de aula, corredores etc…

Para que vocês tenham uma idéia, eu vou colocar apenas uma parte desse documento com as principais idéias de cenários que tivemos na época:

Idéias para cenários:

  • Sala de aula padrão com carteiras, quadro negro, etc
  • Sala com projetor/videos
  • Corredor com bebedouro, quadros, murais, vassoura, balde.
  • Biblioteca com armários
  • Corredor
  • Escadas para ir para o primeiro ou segundo andar…
  • Sala de Educação Física
  • Laboratório de quimica
  • Corredor apenas com mural (acesso a outras coisas apenas como cenário)
  • Banheiro
  • Parquinho
  • Berçario
  • Sala da Tia da Limpeza.
  • Sala de Troféis e Quadros
  • Sala de aula infantil (crianças menores de 4 anos)
  • Quadra de Futebol / Volei
  • Sala dos Professores
  • Sala do Diretor

Sem falar que não estava definido ainda se o jogo seria uma fase única ou em várias fases. Mas no final de tudo ainda teríamos a Edição Haloween do jogo (hahaha).

Acredito que vocês consigam imaginar que com todos esses possíveis cenários e todas as complexidades que haveriam em cada um deles, eu iria ficar desenhando por pelo menos uns 3 anos antes de ter que programar uma linha de código. Por exemplo o laboratório de química, eu queria que tivessem aqueles tubos de ensaio soltando bolhas que empurrariam o avião… Um ventilador de teto que empurrava o avião para baixo.

Enfim, as idéias eram fantásticas mas devido a minha situação era simplesmente inviável, por um tempo eu tentei persistir em algumas dessas idéias, mas chegou um momento que eu me dei conta do óbvio, eu tinha que simplificar a idéia mas não podia simplificar muito senão o jogo também perdia o sentido.

“Algumas pessoas acham que foco significa dizer sim para a coisa em que você irá se focar. Mas não é nada disso. Significa dizer não às centenas de outras boas idéias que existem. Você precisa selecionar cuidadosamente.”

 Steve Jobs.

 

“Este tem sido um de meus mantras – foco e simplicidade. O simples pode ser mais difícil do que o complexo: é preciso trabalhar duro para limpar seus pensamentos de forma a torná-los simples. Mas no final vale a pena, porque, quando chegamos lá, podemos mover montanhas.”

 Steve Jobs.

 

Como a idéia se passava em uma escola, fizemos um protótipo inicial das telas desenhei elas no Adobe Ilustrator e chegamos de fato a programar essas telas e a interação entre elas. Também programamos um protótipo de um modelo de avião circulando em um corredor aonde só tinhamos as paredes e alguns obstáculos como moedas, ventilador, bola, etc… E tudo isso rodava no Android (meio lento mais rodava)…

Felizmente eu tenho uma cópia deste protótipo rodando em meu iPad até hoje, por isto consigo compartilhar com vocês algumas das imagens de como era o jogo no começo:

 

Primeiro Protótipo:

img_0014
img_0015
img_0018
img_0019
img_0020
img_0233
img_0235
img_0239
img_0240
img_0241
img_0286
img_0288
NextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnail

 

Como simplificar uma idéia?

 

Sei que muitos que estão lendo, pensariam que eu já estava com o produto pronto que era só mudar algumas coisas colocar mais alguns obstáculos, deixar ele mais apresentável e publicar. Mas se eu fizesse isso eu estaria matando a idéia e não melhorando ela. Aprendi que na verdade eu precisava recomeçar de novo, mantendo somente as idéias que eram realmente boas e tangíveis.

 ”Tenho tanto orgulho das coisas que deixamos de fazer, como tenho das coisas que fazemos!”

Steve Jobs.

Resolvi fazer uma fase única e um cenário único, a idéia do avião batendo no teto da sala de aula não me agradava então resolvi fazer o jogo a céu aberto dando uma possibilidade do jogador voar mais alto, as cores em tom marrom também não combinavam com a alegria e a felicidade que um jogo deve proporcionar.

Não estar mais limitado a uma escola, foi de longe uma das melhores escolhas que eu poderia ter feito, não porque as idéias eram ruins, mas as idéias da escola eram tantas que somente uma pessoa não poderia fazer, e se ao final eu fizesse somente “meia escola” e não uma escola completa isso tornaria o jogo inviável. Foram diversos aspectos que foram alterados e melhorados constantemente…

E quanto a você já começou a sua idéia? Já definiu seus objetivos? Já pensou em simplificar ao máximo?

Deixe aqui seus comentários, suas experiências também podem ajudar outras pessoas.

Eu também separei algumas imagens que demonstram a evolução de algumas telas do jogo, espero que gostem:

 

Evolução da tela Inicial

 
 

home_1
home_2
home_3
NextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnail

 

Evolução da tela de Comprar

 
 

img_0020
shop_2
shop_3
NextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnail

Evolução da tela de Seleção de Avião

 
 

selplane_1
selplane_2
selplane_3
NextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnailNextGen ScrollGallery thumbnail

 

 

Como foi o desenvolvimento do jogo Rocket Plane – Parte 1

0

Posted by Jair Pereira | Posted in Aplicativos, Dicas | Posted on 06-05-2013

Como sei que muitas pessoas também tem interesse em desenvolvimento de jogos, resolvi preparar uma série de artigos explicando sobre como foi o desenvolvimento do Rocket Plane e quais foram as principais dificuldades encontradas. Este é o primeiro destes artigos e pretendo lançar os restantes quando tiver tempo disponível para escrever.

E então, o que você acha de saber um pouco mais sobre como foi desenvolver o jogo?

Primeiro de tudo: A idéia… Eu não tinha idéia de como seriam ainda todos os cenários, se haveriam vários cenários, fases ou se seria uma única fase infinita com diversos obstáculos.

Inicialmente eu havia apenas determinado alguns itens:

  1. Multiplataforma (iOS e Android)
  2. O nome seria “Rocket Plane”
  3. Haveriam no jogo vários modelos de aviões de papel, uns mais simples e outros mais complexos com maior velocidade, resistência a vento, e outras características.
  4. O primeiro cenário seria uma escola, onde as crianças da escola jogariam os aviões de papel, e o avião ficaria circulando pelos diversos ambientes da escola.

É sobre algumas destas primeiras características que eu gostaria de comentar neste primeiro artigo.

1 – Multiplataforma

Existem hoje diversas maneiras de desenvolver um jogo multiplataforma, a principal diferença entre elas é o quanto você está disposto a pagar por uma ferramenta que facilite ainda mais o seu trabalho, e quanto tempo você tem disponível pra aprender todos os recursos desta ferramenta.

Como eu não tinha recursos nem tempo suficientes para bancar uma ferramenta, dentre as disponíveis com um preço acessível acabei optando por desenvolver usando o COCOS2D-X. Que é um framework open-source baseado no COCOS2D porém sua principal característica era a multiplataforma.

Eu não gastei mais do que duas semanas procurando por uma ferramenta, quando consegui compilar um exemplo e executar nas duas plataformas eu descobri que conseguiria fazer o jogo nesta ferramenta e que a princípio não haveriam grandes dificuldades.

Não pretendo comentar agora sobre as dificuldades encontradas no desenvolvimento com COCOS2D-X, pretendo fazer isto em um artigo específico. Mas apesar das dificuldades, eu recomendo este framework e o COCOS2D para aqueles que estejam interessados desde já.

 

2 – O nome seria “Rocket Plane”

Uma das partes fundamentais que eu considero é a escolha do nome, você tem que escolher um nome que o agrade e que represente aquela idéia final que você deseja construir. Não é bom para um projeto ficar alterando o nome durante a execução.

Quando você tiver um nome, faça uma logo e um ícone, mesmo que eles não sejam a logo que você deseja usar até o final.

Isto irá te motivar a continuar com o projeto, você começara a ver ele mais “pronto” do que se estivesse sem uma logo, sem uma identidade.

Por isto quero compartilhar com vocês a primeira logo e um dos primeiros ícones do Rocket Plane. Como eram, e como eles ficaram no final.

 

Primeiro Ícone Segundo Ícone Terceiro Ícone Ícone Final
Rocket Plane

 

Primeira Logo:

 
Logo Final:

Venha VOAR você também!!

 

3 – Haveriam no jogo vários modelos de aviões de papel, uns mais simples e outros mais complexos com maior velocidade, resistência a vento, e outras características.

Este não foi exatamente o terceiro passo, mas para fazer tudo funcionar, eu tinha que ter pelo menos um avião, por isto fiz o desenho de um modelo de avião de papel simples.

Um dos princípios era que todos os modelos de aviões deveriam existir na vida real, então eles tinham que ser dobrados, e após algumas consultas procurando na internet, descobri sites que ensinavam a dobrar aviões de papel passo a passo. O difícil foi entender e conseguir fazer os aviões sem perder nenhum passo… hehe

Então eu apenas tive que ver esses tutoriais, e dobrá-los. Quando eu terminava um avião eu também tinha que tirar fotos do modelo em todos os ângulos possíveis para que eu pudesse desenhá-los no computador.

Após as fotos, eu precisei fazer o desenho do traçado de cada modelo em todas as posições e após isso, tive que colorir em pelo menos 4 cores, pois queria que os jogadores pudessem escolher as cores. Ao todo foram 48 imagens por modelo de avião, eu fiz 8 modelos (2 foram descartados por não terem ficado bons o suficiente) e demorei cerca de 8 horas para terminar cada um deles.

Seguem algumas imagens de como foi o processo de fotografia e desenho no computador:

 

 

 


Mas calma que ainda não acabou, Depois disso tive o trabalho de juntar todas as imagens em uma única imagem e fazer o que na programação de jogos chamamos de Sprites. Para isso usei uma ferramenta chamada SpriteHelper que gera esta única imagem e um arquivo XML com as informações destas imagens, após este processo tiver que definir as animações de cada um dos modelos e cores de aviões.

Animação de VOAR, VOLTA 360 GRAUS, VOLTA 180 GRAUS etc…

4 – O primeiro cenário seria uma escola, onde as crianças da escola jogariam os aviões de papel, e o avião ficaria circulando pelos diversos ambientes da escola

Devido a complexidade deste item, eu pretendo deixá-lo para um próximo artigo, onde vou tentar detalhar um pouco mais sobre como foi a idéia da escola e sobre como ela não deu certo.

Para mim, o principal objetivo destes artigos é de certa forma deixar documentado todo o trabalho que foi feito durante o jogo, e mostrar que o desenvolvimento de um jogo não é assim tão simples quanto a maioria das pessoas pensam.

Eu acredito que na prática levando em consideração todas as imagens que foram feitas, todo o trabalho eu posso dizer que desenvolvi 3 jogos, e entreguei apenas 1.

Mas isso não é um fato ruim, pois me fez com que cada vez que eu trocasse uma imagem, esta imagem estava sendo substituída por uma imagem melhor, e consequentemente o jogo estava ficando cada vez melhor.

Espero que gostem desses artigos, e que eles sejam capazes de te motivar ou motivar outras pessoas a desenvolver também.