Programaci³n de videojuegos en Android con libGDX

Click here to load reader

download Programaci³n de videojuegos en Android con libGDX

of 49

  • date post

    12-Feb-2015
  • Category

    Documents

  • view

    66
  • download

    1

Embed Size (px)

Transcript of Programaci³n de videojuegos en Android con libGDX

IntroduccinalibGDX Descargarlalibrera CrearunproyectoJAVAnuevo PortarelproyectoJAVAaunproyectoAndroid CiclodevidadeunaaplicacinlibGDX Grficos TexturaseInterpolacin TextureRegion TextuimagrePacker Empaquetarimgenesautomaticamente Cargadeimgenesempaquetadas Dibujarimgenesenpantalla Entrada Detectarpulsacionesenlapantallatctil Audio Sounds Cargarsonidos Reproducirsonidos Descargarsonidos Music Cargarunamsica Descargarunamsica Navegandoentrepantallasdeljuego Vibracin Cmaras Animacin Manualdebuenasprcticas Separarlalgicadelapresentacin PginasparaDesarrollodeJuegos Solucindeproblemas

IntroduccinalibGDX

LibGDXesunframeworkmultiplataformadedesarrollodejuegosparaWindows,Linuxy Android.EstescritoenJavaconunamezcladeC/C++paradarsoporteyrendimientoatareas relacionadasconelusodelafsicayprocesamientodeaudio. LibGDXpermitegenerarunaaplicacinensuPCyutilizarelmismocdigoenAndroid,deesta maneraelprocesodepruebasydepuracinserealizadeformamsrpidaycmodayaque elPCesmuchomsrpidoqueeldispositivoAndroid. ConLibGDXnosaseguramosdequelamismaaplicacinpuedefuncionarcorrectamenteen diferentesdispositivos. LibGDXestcompuestoporunaseriedecomponentesdeserncomunesatodaslas aplicaciones. MarcodeAplicacin,quemanejarelbucleprincipalyademsestarencargadodelclicode vida,esdecir,loseventosdecreacin,destruccin,pausayresumedelamisma. UncomponentedeGrficosquenospermitirgestionarlarepresentacindeimgenesy objetosgrficosenlapantalla. UncomponentedeAudio,quenosfacilitarelaccesoalossonidosymsicadelaaplicacin. UncomponentededeEntradaySalidaparaleeryescribirlosdiferentesficherosdedatos comoporejemplo,imgenes,archivosdeconfiguracin,sonidos,msica,texturas,... UncomponentedeEntradaquegestionaralaentradaatravsdelteclado,pantallatcilo acelermetro.

Adicionalmentepodramosampliarlagamademdulosconotrosdosms. Math,permitelagestinrpidadeclculosmatemticosorientadosaldesarrollode videojuegos. Physics,quebsicamenteesunwrapperdeBox2Dypermitecontrolarlagestindecolisiones. EstegrficomuestraenmayordetalleelsistemademdulosdeLibGDX

Realmente,estosmdulossonslointerfacespblicasqueofrecelalibrera. Lapropiaaplicacinserlaencargadadelagestindelosdiferentesmdulos. Ventajas: Soporte2dfull(bajoyaltonivel) Muchadocumentacin,tutoriales,ejemplosdecdigo ReleasesenformaperidicalaultimafueensetiembreyanteriorenMayo Sepuedeprobarendesktop(antesdesubiramobile) ManejaAudio,input(usuario),fsica,matemtica,archivos MaspoderosoqueAndengine Soporta3d libGDXtedaunaccesomsfcilaBajonivel Posibilidaddetomarunjuegohechoenjavajar2do3dyadaptarloalibgdxparaq funcionenativoenandroid,esohicieronconeljuegoDroidInvaders3d. Desventaja: Elsoportedealtonivelen3destaenconstruccinactualmente Linksdereferencia: PaginaOficial Wikidelproyecto Blog Foro Juegoen3dyarealizado:DroidInvaders ListadodeEjemplos VideoTutoriales Documentacin

DescargarlalibreraParadescargarlalibreradebemosiralawebdelamisma:http://libgdx.badlogicgames.com/

Aladerechapulsamosendownloadydelasdosversionesdelalibreraquenosaparecen, seleccionamoslaversinNightlyBuild.

TraspulsarenDownloadyaslonosquedadescargarlaltimaversindelalibrera.

CrearunproyectoJAVAnuevoAunqueelobjetivofinalesqueeljuegofuncionesobreAndroid,trabajaremosconunproyecto JAVAqueunavezterminadoseportaraAndroid.

ParacrearunproyectoJAVAenEclipsesimplementeenelmenvamosaFile>New>Java Project.Ledamosunnombrealproyecto(enestecasoDemo1).Elegimoslarutadondese crearenmemoriayledamosaFinish.

Unavezcreadoelproyectoelsiguientepasoseraadirlalibrera.Paraellounabuenaprctica escrearundirectoriodentrodelproyectodondeincluirlaslibrerasqueusemos. ParaelloclickderechosobrenuestroproyectoyNew>Folder.Ennuestroejemploesta carpetalallamaremoslibs. Unavezcreadaestacarpeta,simplementetendremosqueaadiralamismaloque necesitamosparaesteproyecto.Paraaadir,nosvamosaldirectoriodondehemosguardadola libreradescargadaenelapartadoanteriorypodemosarrastrarocopiarlosarchivosque necesitamos(enlaimagen).

Nosquedaraelproyectodeestaforma:

Yatenemoslaslibreraseneldirectorioquehemoscreadodentrodelproyecto.Peroanno formanpartedelmismo,elsiguientepasoesaadirlas.Paraelloseleccionamosloscuatro ficherosdentrodelacarpetalibs,hacemosclickderechoyenelmencontextual seleccionamosBuildPath>AddtoBuildPath.Elproyectoquedadelasiguienteforma:

Otrabuenaprctica,aunquenonecesariaesaadirlainformacincontenidaenelJavadocde lalibrera.Elobjetivodeestoesquecuandosemuestrelaayudaemergentedeeclipseveamos lainformacincontenidaenelJavadocdelalibrera.

ParaellohacemosclickderechosobreelproyectoyenelmencontextualBuildPath> ConfigureBuildPath...trasloquesenosmuestralosiguiente:

Enestaventanadesplegamosgdx.jarytalcomoseveenlaimagenseleccionamosJavadoc location.UnavezhechoestopulsamossobreEdit...

PulsamosenBrowse...ybuscamoslalocalizacindelJavadocqueseencuentraen libgdxnightly>docs>api.UnavezseleccionadoestedirectoriopulsamossobreOkpara confirmarelcambio.Yyatenemosestacaractersticahabilitada. UnavezpreparadoEclipseynuestroproyectoJAVAyapodemosempezaratrabajar. Loprimerosercrearlaclaseprincipaldeljuego,queserlaencargadademanejarycontrolar

todoloqueocurraeneljuego. Paraelloclickderechosobresrc>New>Class.

Creamoslaclaseenelpaquetecom.desarrolladoresandroid.libgdx.demo1 ElnombredelamismaesDemo1Game EstanuevaclaseheredardeGame(com.badlogic.gdx.Game).

Unavezcreadalaclaseprincipaldelproyecto,crearemoselpuntodeentradaparalaejecucin delaaplicacinJAVA.Unaclasequenospermitirlanzareljuego.

Paraellocreamosunaclasequecontengaelmtodomain:

Nombredelaclase:Demo1Desktop Mismopaquetequelaclaseprincipal. Seleccionamoslaopcinpublicstaticvoidmain(String[]args)

Nosquedaraelproyectodelasiguienteforma:

ParapoderlanzareljuegoaadimosenlaclaseDemo1Desktoptenemosqueaadirlo siguiente: newJoglApplication(newDemo1Game(),"Demo1",320,480,false) Losparmetrosindicanlosiguiente: newDemo1Game().InstanciadelaclasequeimplementaGame "Demo1".Queeselttulodelaaplicacin. 320.Anchoenpxeles. 480.Altoenpxeles. false.ParaindicarquenoqueremosutilizarOpenGLS2.0enestecaso.Porloqueseutilizar el1.1 Unavezhechoestoyatenemosunjuegoquenohacenadayquepodemoslanzarcomo aplicacinJAVA. ParalanzarlotenemosquehacerclickderechoenelproyectoyRunAs>JavaApplication Unavezhechoestonossaldrunaventanaparaseleccionarelpuntodeentradadela aplicacinqueennuestroejemploesDemo1Desktop.java

Elresultadodelaejecucinserunapantallanegraconlaresolucinindicada.

PortarelproyectoJAVAaunproyectoAndroidAhoracrearemoselproyectoparacompilarloenAndroid.Paraefectospracticosusareun ejemploqueyoyatena.HechoenescritoriollamadoHolaLibgdx.

11.Crearcarpetalibsdentrodelproyectoyponerlelassiguienteslibrerasdelasque descargamosincluyendoesascarpetas: Importante!"SEDEBENINCLUIRLASCARPETASarmeabiyarmeabiv7acomoseveenla imagen.Estascarpetasvienenenlaslibrerasquedescargamos"

12.Referenciamoslaslibrerascopiadas.Clickderechoalproyecto/buildpath/configurebuild path...

13.Antesdecerraresapantallaanterioriralapestaaprojectyadjuntarlelareferenciaal proyectodeescritorio.

12.ModificarlaActivityprincipal"HolaLibGdxActivity"paraquenoextiendadeActivitysinode AndroidApplication.(crt+shift+o)pararesolverlosimportsnecesarios. package c o m . l i b g d x . h o l a l i b g d x import a n d r o i d . o s . B u n d l e import c o m . b a d l o g i c . g d x . b a c k e n d s . a n d r o i d . A n d r o i d A p p l i c a t i o n import c o m . l i b g d x . h o l a l i b g x . H o l a L i b g d x public class H o l a L i b G d x A c t i v i t y extends A n d r o i d A p p l i c a t i o n { /**Calledwhentheactivityisfirstcreated.*/ @Override public void o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) { super. o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) / / A c a i n i c i a l i z a m o s a l a p p d e e s c r i t o r i o . i n i t i a l i z e ( new H o l a L i b g d x ( ) , false) } }

Deberaquedarnosas. 13.Loejecutamosenelemulador.

Desbloqueamoseldispositivoenelemulador.

ySeejecutaexactamentelomismoqueenescritorio.Loquehicimosrecin,tambincompil laaplicacinenunarchivo.apkdentrodeldirectorio/bindelproyectoandroid, esearchivo.apksellevaaldispositivofisicorealyalejecutarloteinstalalaappcreada.

CiclodevidadeunaaplicacinlibGDXEsteapartadodescribecmoseestructuraunaaplicacinlibgdx. LAAPLICACION Eselprincipalpuntodeentradaparacualquieraplicacinlibgdx.LainterfazApplication determinalaplataformaylosgraficosdefondoquesernutilizadosporlaaplicacin.Lainterfaz tambinproporcionalosmtodosparaaccederagrficos,audio,archivosdeentraday mdulosdeE/S.TambindaaccesoaunmdulodeLoggingelcualfuncionaentodaslas plataformas. LibGDXescompatibleactualmentecondosbackendsdeaplicacionesdeescritorio(lwjgly JOGL)yotraparaAndroid. ParacrearunaaplicacinlibGDX,sehadeimplementarlainterfazApplicationListener primero. APPLICATIONLISTENER ApplicationListenereselresponsabledelainicializacindelaaplicacin,laactualizacindel estadodeljuego(esdecir,lalgicadeljuego),renderizacindelaimagen,pausadodeljuego, guardarelestadoylaliberacindelosrecursosalsalirdelaaplicacin. Estambinellugardondeloseventosdelciclodevidasonmanejados.Cadaaplicacin/juego, sinimportarelbackendy/oplataformadedestinotendrqueimplementarlainterfaz ApplicationListener.Laimplementacinesexactamentelamismaparatodaslasplataformas. Portanto,ApplicationesresponsabledelcircuitodejuegoyApplicationListeneresellugar dondeseimplementalalgicadeljuego. LaimplementacindelainterfazApplicationListener

Loseventosquesondesencadenadosporlosenlaaplicacindelciclodevidatalcomose describe: create():Sellamaunavezcuandosecrealaaplicacin. resize(intwidth,intheight):Sellamaaestemtodocadavezquelapantalladeljuego cambiasutamaoyeljuegonoestenelestadodepausa.Tambinselellamaslounavez justodespusdelmtodocreate().Losparmetrossonlanuevaanchurayalturadelapantalla. render():Mtodollamadoporelbucledeljuegodelaaplicacincadavez