Jogo 2D - diatinf
Transcrição
Jogo 2D - diatinf
CriandoumJoguinho2D Prof.FellipeAleixo([email protected]) Conteúdo • Desenvolvimentodeumjogo2DparaAndroid • ComponentesdeInterfaceeClasses – SurfaceView,SurfaceHolder – Canvas,Paint – GestureDetector – Thread SurfaceView,SurfaceHolder • SurfaceView (android.view.SurfaceView) – – – – Descendentedeandroid.view.View Provêumasuperfíciededesenhodedicadadentrodaview Permitearenderização utilizandoumathreadsecundária OmétodogetHolder retornaoobjetoqueacessa a superfície • SurfaceHolder (android.view.SurfaceHolder) – Interfacequepermiteacessarecontrolarasalteraçõesna superfíciededesenho – OmétodolockCanvas retornaoobjetoCanvas para desenhonasuperfícieeunlockCanvasAndPost finalizaa edição SurfaceHolder.Callback,Canvas • SurfaceHolder.Callback (android.view.SurfaceHolder.CallBack) – Interfacequerecebeasalteraçõesnasuperfíciede desenho – Responsávelpelocontroledathreadsecundáriade desenho,iniciandoeparandoathread • Canvas (android.graphics.Canvas) – – – – – Classequepossuiosmétodos“draw”paradesenho drawRect – Desenhaumretângulo drawCircle – Desenhaumcírculo drawLine – Desenhaumalinha drawText – Desenhaumtexto Paint,Thread,GestureDetector • Paint (android.graphics.Paint) – Classequearmazenaestilosecoresutilizadospelos métodosdedesenho • Thread(java.lang.Thread) – Controlaumaunidadeconcorrentedeexecução.Start iniciaaexecuçãodaThread eJoin paraaexecução • GestureDetector (android.view.GestureDetector) – Detectagestoseeventosdemovimento (MotionEvent)dousuário Jogo • Objetivo – Destruiroalvo(oitopartes)com omáximodetrêsbolas 1 2 3 5 • Elementosdojogo – – – – – – – Tempodojogo- 1 Númerodebolasrestantes- 2 Númerodealvosdestruídos- 3 Topodotela- 4 Alvo- 5 Bola- 6 Barraderebate- 7 6 7 4 Classes • MainActivity – EstendeActivity – ResponsávelpelainstanciaçãodaView (JoguinhoView) – Capturaoseventosdemovimento(MotionEvent) utilizandooGestureDetector • JoguinhoView – EstendeSurfaceView eimplementaSurfaceHolder.Callback – MantémosobjetosPaint paradesenharoselementosdo jogo – MantémoobjetoJoghuinhoThread paracontrolarathread deexecuçãodojogo – MantémoobjetoJoguinhocomalógicadojogo Classes • JoguinhoThread – – – – Controlaolaçodeexecuçãodojogo Recuperaoobjetodedesenho(Canvas) Atualizaaposiçãodoselementosdojogo(Joguinho) DesenhaoselementosnoCanvas (JoguinhoView) • Joguinho – Implementaalógicadojogo – Dimensionaoselementosdeacordocomotamanhodatela – Controlaoestadodojogo,númerodebolas,alvosatingidos, tempodejogo,etc. – Calculaasposiçõesdoselementos,controlaavisibilidadedos alvos,velocidadedabola,verificaascolisões,etc. MainActivity • publicclassMainActivity extendsActivity • Atributos – privateJoguinhoView view; – privateGestureDetector gd; • Método onCreate – Instanciaaview eassociaàatividade • view=newJoguinhoView(this); • setContentView(view); – Instanciaogesture detector • gd =newGestureDetector(this,gdListener); MainActivity– Métodos • onPause – Paraojogo,pausandoathread • view.pararJogo(); • onTouchEvent – Recuperaoeventogeradonaview • int acao =event.getAction(); – Verificaotipodoevento • if(acao ==MotionEvent.ACTION_MOVE) • view.moverBarra(event); – Disparaoeventonogesture detector • returngd.onTouchEvent(event); MainActivity– GestureDetector • ObjetoListener dedetençãodegestos – Capturaoeventodeduplocliqueutilizadopara lançarabola SimpleOnGestureListener gdListener =newSimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent event){ view.lancarBola(event); return true; } }; JoguinhoView • ClasseJoguinhoView publicclassJoguinhoView extendsSurfaceView implementsSurfaceHolder.Callback { privateActivityactivity; privateAlertDialog.Builder builder; private SurfaceHolder holder; private Joguinhoj; private JoguinhoThread jt; private Paint alvoP,barraP,bolaP,fundoP,textoP,topoP; private int telaX; private int telaY; ... JoguinhoView– Construtor • Construtor – RecuperaoobjetoSurfaceHolder • holder =this.getHolder(); – Colocaaprópriaview comoCallback das alteraçõesnasuperfíciededesenho • holder.addCallback(this); – Iniciaoobjetoquecontrolaalógicadojogo • j=newJoguinho(); – Iniciaosobjetosdedesenho • alvoP =newPaint();... JoguinhoView– Dimensionamento • onSizeChanged – Échamadoapósoconstrutordaview – Recuperaasdimensõesdatela • telaX =w; • telaY =h; – Dimensionaoselementosdojogo • j.dimensionarElementos(telaX,telaY); – Configuraosobjetosdedesenho • alvoP.setStrokeWidth(j.alvoAltura); – ChamaométodonovoJogo • novoJogo(); JoguinhoView– ControledoJogo • novoJogo – Controlaoinícioereiníciodojogo – RepassaoiníciodojogoparaaclasseJoguinho • j.novoJogo(); • fimJogo – Chamaométododepararojogo • pararJogo(); – Mostraamensagemdefimdejogo,perguntandose desejajogarnovamente • pararJogo – Pausaathreaddeexecuçãodojogo • if (jt !=null)jt.setRunning(false); JoguinhoView– MétodosdeDesenho • desenharElementos – DesenhaoselementosdojogonoCanvas recebidocomo parâmetro – Utilizaosmétodosdedesenhodraw eosobjetosPaint • moverBarra – RepassaoMotionEvent paraaclassequecontrolaojogo • if (!j.fimJogo)j.moverBarra(event); • lancarBola – RepassaoMotionEvent paraaclassequecontrolaojogo • if (!j.fimJogo)j.lancarBola(event); JoguinhoView– Callback • surfaceCreated – Instanciaathreadecolocaemexecução • jt =newJoguinhoThread(holder,j,this); • jt.setRunning(true); • jt.start(); • surfaceDestroyed – Paraathread • jt.setRunning(false); • jt.join(); JoguinhoThread • publicclassJoguinhoThread extendsThread • PrincipaisAtributos – privateSurfaceHolder holder; – privateJoguinho j; – privateJoguinhoView v; – privateboolean loop; • MétodosetRunning (boolean aLoop) – Setaavariáveldecontroledoloopdeexecução • loop=aLoop; JoguinhoThread– LoopdeExecução • Método run – Loopdeexecuçãodojogo – Calculaotempodeexecuçãoentreaschamadas, desenhaasnovasposiçõesnoCanvas long t1=System.currentTimeMillis(); while(loop) { canvas =holder.lockCanvas(); long t2=System.currentTimeMillis(); long dt =t2- t1; j.atualizarPosicoes(dt); v.desenharElementos(canvas); t1=t2; } holder.unlockCanvasAndPost(canvas); Joguinho– LógicadoJogo • AclasseJoguinhoéresponsávelpelalógicadojogo • Construtor – Iniciaoselementosdojogoeovetordealvos • MétododimensionarElementos – Dimensionaoselementosdojogodeacordocomo tamanhodateladodispositivo • MétodonovoJogo – Reiniciaoestadodojogo • MétodoatualizarPosicoes – Atualizaasposiçõesdoselementoseverificaascolisões Joguinho– LógicadoJogo • MétodomoverBarra – Atualizaaposiçãodabarradeacordocomo MotionEvent geradopelousuário • MétodolancarBola – Atualizaaposiçãodabarradeacordocomo MotionEvent geradopelousuário Exercícios 1. AlteraçõesnoJogoApresentado a. Incluirnojogoumcontroledeníveisdeformaque, quandoumalvoforcomplementedestruído,um nívelnovodeveseriniciadocontendoumnovoalvo. Emcadanívelnovo,avelocidadedaboladeveser incrementada b. Incluirnojogoumranking,armazenandoemum bancodedadosonomedojogadoreapontuação obtida.Fazerumaview quepermitavisualizaro rankingdojogonodispositivo 2. ImplementarumjogosemelhanteaMoon Patrol ouSpaceInvaders Referências • AndroidparaProgramadores– Uma abordagembaseadaemaplicativos.Paul Deitel...[etal.].Bookman,2013 • GoogleAndroid– Aprendaacriaraplicações paradispositivosmóveiscomoAndroidSKD. RicardoR.Lecheta.Novatec,2013 • http://developer.android.com/reference
Documentos relacionados
Apresentação Engº Mário Fernandes - Siteinforma
o IntelliJ Idea Comunity o http://www.jetbrains.com/idea/download/
Leia mais