Desenvolvendo Jogos Para Android

42
Desenvolvendo jogos para Android - Parte 1 - Criando elementos gráficos Fonte: http://www.tutoriandroid.com/2012/05/como-criar-um-jogo- estilo-plataforma.html Jogo que iremos desenvolver: Smash! Hoje começaremos com uma série de tutoriais sobre desenvolvimento de jogos/games para Android. Para isso iremos construir juntos, passo a passo, o jogo que estou chamando de Smash! Nessa primeira parte aprenderemos como fazer os personagens, e o background utilizando a classe Sprite. O jogo é bastante simples: há os personagens rosas e os dourados. O objetivo do jogador é derrotar todos os rosas (clicando neles) sem clicar nos dourados, no mínimo de tempo possível. A medida que se avança nas fases os personagens ficam mais rápidos. Iremos utilizar como base para o desenvolvimento o nosso Android Game Engine que estamos desenvolvendo aqui no blog. Iremos usar a 1ª versão dele, que tem pouca coisa mas o suficiente para criar esse jogo. Se

description

Aprenda o passo a passo do desenvolvimento de jogos para android e começe já a criar os seus.

Transcript of Desenvolvendo Jogos Para Android

Desenvolvendo jogos para Android - Parte 1 - Criando elementos grficosFonte: http://www.tutoriandroid.com/2012/05/como-criar-um-jogo-estilo-plataforma.htmlJogo que iremos desenvolver: Smash!Hoje comearemos com uma srie de tutoriais sobre desenvolvimento de jogos/games paraAndroid.Paraissoiremosconstruirjuntos,passoapasso,ojogoqueestouchamandodeSmash! essa primeira parte aprenderemos como !a"er os personagens, eo background utili"ando a classe Sprite.# jogo bastante simples$ h% os personagens rosas e os dourados. # objetivo do jogador derrotar todos os rosas &clicandoneles' semclicar nos dourados, nom(nimodetempoposs(vel. A medida que se avana nas !ases os personagens !icam mais r%pidos.)remos utili"ar como base para o desenvolvimento o nosso Android *ame +ngine que estamosdesenvolvendoaqui noblog. )remos usar a,- vers.odele, quetempoucacoisamas osu!iciente para criar esse jogo. Se voc/ quer saber como !unciona essa engine, quer entendercomo o jogo roda, acesse os tutoriais sobre eleaqui.Acompanhe o desenvolvimento por aqui ou bai0e o c1digo usado aqui ou o .ap2 aqui.+nt.o vamos comear. 3rie um novo projeto com as suas pre!er/ncias. A primeira coisa a se!a"er adicionar o Android *ame +ngine no projeto. )sso simples. Primeiro crie uma pasta4libs4 na rai" do seu projeto &junto com src, res...' e nessa pasta coloque esse aquivo. Agorav% no eclipse, abra essa pasta &se ainda n.o apareceu no Package Explorer doeclipse de um 56que ir% aparecer', d/ um clique direito no arquivo que adicionamos &AndroidGameEngine.jar'e v% em Build Path -> Add to Build Path como mostra a !igura$Adicionando a biblioteca do Android Game Engine ao projeto.5eito isso vamoscomearacodi!ica.o do jogode!ato. 7amoscomearcomospritedopersonagemdourado, chamado de Gold, por ser bastantesimples. +leapenas vai !icarrodando o cen%rio, e n.o h% altera.o na anima.o. +le ir% estender a classe Sprite$package com.tutoriandroid.games.smash;import java.util.Random;import android.graphics.Bitmap;import com.gdacarv.engine.androidgame.Sprite;public class Gold extends Sprite {

public int speedX, speedY;public Gold(int x, int , Random random, Bitmap !mp, int !mp"ro#s, int !mp"columns$ {super(!mp, !mp"ro#s, !mp"columns$;set%nimation(%&'("G)$; ** Seta a anima+,o apenas como -ida- (cicl.ca$.speedX / random.next'nt(0$ 1 2; **3elocidade hori4ontal de 12 a 2.speedY / random.next'nt(0$ 1 2; **3elocidade vertical de 12 a 2.this.x / x;this. / ;56)verridepublic void update($ { ** %nda.super.update($;x 7/ speedX; 7/ speedY;558em simples n.o9 # construtor recebe como par:metros a posi.o &0, ;', uma inst:ncia paragerar nB$;this.x / x;this. / ;56)verridepublic void update($ {animationSpeed>ontrol77; ** Csta vers,o do %ndroid Game Cngine n,oif(animationSpeed>ontrol D/ E 1 speed${ ** suporta mudan+a na super.update($; ** velocidade da anima+,o, ent,o =oi =eitoanimationSpeed>ontrol / ;; ** esse hac9 para diminuir a 5 ** velocidade, Fue estava muito rGpida.

if(Hding${ ** Se n,o estG morrendo, anda na dire+,o.x 7/ direction I J D ; K direction D J K 1speed L speed L ;; 7/ (ath.a!s((direction1M$ I J$ D ; K direction D E NN direction O M K speed L 1speed L ;;5else{ ** Se estG morrendo, aumenta a transparPncia atQ =icarinvis.vel.int alpha / m8aint.get%lpha($;if(alpha O/ MR$dead / true;elsem8aint.set%lpha(alpha1:;$;55

public void changeontext context$ {super(context$;56)verrideprotected void onUoad($ {pin9s / new %rraUistO8in9D($;golds / new %rraUistOGoldD($;Random random / new Random($;Resources res / getResources($;Bitmap !itmap8in9 / BitmapSactor.decodeResource(res, R.dra#a!le.pin9$;Bitmap !itmapGold / BitmapSactor.decodeResource(res, R.dra#a!le.gold"head$;int limit8in9X / getVidth($1!itmap8in9.getVidth($*E, ** T')&"ontext ctx / get>ontext($;((%ctivit$ ctx$.=inish($;'ntent intent / new 'ntent(ctx, (ainGame%ctivit.class$; **'nicia o jogoctx.start%ctivit(intent$;556)verrideprotected void onUoad($ {Resources res / getResources($;Sprite title; mSprites.add(title / new Sprite(BitmapSactor.decodeResource(res, R.dra#a!le.title$$$;title.x / getVidth($*M 1 title.#idth*M;title. / M;;paintText / new 8aint($;paintText.set>olor(>olor.VW'TC$;paintText.setTextSi4e(MR$;56)verrideprotected void onanvas canvas$ {super.onT')&"ontext ctx / get>ontext($;((%ctivit$ ctx$.=inish($;'ntent intent / new 'ntent(ctx, (ainGame%ctivit.class$; **'nicia novamente ojogoctx.start%ctivit(intent$;556)verrideprotected void onUoad($ {Resources res / getResources($;Sprite gameover; mSprites.add(gameover / new Sprite(BitmapSactor.decodeResource(res, R.dra#a!le.gameover$$$;gameover.x / getVidth($*M 1 gameover.#idth*M;gameover. / (int$ (getWeight($A;.M=$;paintText / new 8aint($;paintText.set>olor(>olor.VW'TC$;paintText.setTextSi4e(MR$;score / ((%ctivit$ context$.get'ntent($.get'ntCxtra(-S>)RC-, ;$; **>arrega o score passado pela 'ntent56)verrideprotected void onanvas canvas$ {super.onT')&"hama oGame)ver%ctivit...intent.putCxtra(-S>)RC-, score$; ** 8assa o score como par[metrocontext.start%ctivit(intent$;5for(8in9 pin9 L pin9s$ ** 8ara cada pin9...if(Hpin9.is...Pronto. o on-oad simplesmentepegamosohighscore,comparamos como atualese !ormaior salvamos. + mostramos o ultimo high score na tela.Agoranossojogoj%est%4completo4. 3laroquevoc/podemelhoraGloemv%rios outrosaspectosainda, maspara !imdetutoriais eleest%!inali"ado.)rei utili"aGloparamostrarcomo adicionar AdIob no seu aplicativo e como publicar no *oogle Pla;.Como criar $m jogo estilo plataformaAtendendo a pedidos irei e0plicar aqui a base de como !a"er um jogo estiloplata!orma. Apesar de pareceremsimples s.oum poucomais comple0odoquesepensa.estetutorial irei e0plicar os conceitos mais b%sicos, ques.oagravidade, opuloeamovimenta.o sobre as plata!ormas.3laroaindah%muitasoutrascoisasquecomp>eessetipodejogo,comoinimigos,itens,movimenta>es realistas, colis>es com paredes e outros objetos, movimenta.oda c:mera pelo cen%rio, anima.o dos personagens, a>es, entre muitos outros.# projeto !inal voc/ pode bai0ar aqui.Para comear vamos criar um projeto, o qual coloquei o nome de 4Plata!orma *ame4. +mseguida crieuma pastanoseuprojeto, juntocomas pastas res/ src/ etc... +adicioneesse aquivo. +sse o jar da nossa *ame +ngine. Agora, pelo eclipse, clique com bot.o direitonesse arquivo recm adicionado &se a pasta libs ainda n.o tiver aparecido d/ um 56 paraatuali"ar', v% em Build Path -> Add to Build Path, similar a !igura$!ame Ongine adicionado ao projeto 4mashPronto, agora nosso projeto j% conta com a biblioteca de desenvolvimento de games paraAndroid criada por mim. 7amos comear o desenvolvimento do jogo em si. Primeiro vamoscriar o gr%!ico que representa nosso her1i. *eralmente utili"ado uma sequ/ncia em Spritepararepresentaroher1i esuasmaisvariadasanima>es,masaqui vamosapenasutili"aruma !ormaovala"ul.3rieumapastaem res comonomede drawable einsiraoseguintearquivo LIM$OKxml version/-:.;- encoding/-ut=1?-KDOshape xmlnsLandroid/-httpL99schemas.android.com*ap9*res*android- androidLshape/-oval-DOsi4e androidL#idth/-2;dp- androidLheight/-R;dp-*DOsolid androidLcolor/-\==;;;;==-*DO*shapeDAgora na nossa activit; principal n.o precisamos carregar um la;out por 0ml, vamos apenasinstanciar o nosso *ame7ieC$public class 8lata=ormaGame%ctivit extends %ctivit {*AA >alled #hen the activit is =irst created. A*6)verridepublic void on>reate(Bundle saved'nstanceState$ {super.on>reate(saved'nstanceState$;set>ontent3ie#(new 8lata=ormaGame3ie#(this$$;55Acusar% um erro pois Plata!orma*ame7ieC n.o e0iste, ent.o vamos criaGlo$public class 8lata=ormaGame3ie# extends Game3ie# {

private static final =loat GR%3'TY / ;.J=;private static final =loat 3CU)>'