Autore Topic: Eventuali tool per programmare giochi Android  (Letto 965 volte)

Offline Jybo14

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Windows 7
Eventuali tool per programmare giochi Android
« il: 06 Marzo 2014, 22:57:43 CET »
0
Salve a tutti,
probabilmente sto per fare una domanda banale e anche per certi versi "sbagliata", e per questo mi scuso in anticipo, è che ancora non ho perfettamente chiare le cose :(
La posto qui, nel caso non sia la sezione giusta mi scuso.
Allora, premetto che conosco in massima linea la programmazione Android, l'ho studiata e ho programmato diverse cose, sempre però a livello poco più che basilare.
Ora stavo iniziandomi ad approcciare alla creazione di giochi per Android (naturalmente iniziando con qualcosa di base per poi crescere sempre di più), ma sono incappato in come organizzare la cosa; premetto che ho cercato e letto tantissimi post e articoli sul web, ma volevo porre una domanda nello specifico, soprattutto rivolta a chi in questo campo già pratica da tempo.
Allora:
- come si possono definire i vari "tool" di cui trovo notizie su internet, come "Corona", "AndEngine", "LibGDX", eccetera? Cioè, in modo pratico, cosa sono? Sono semplicemente librerie, framework, o cosa di preciso?
- come si usano questi tool? Cioè, si utilizzano con l'IDE con il quale si sviluppa normalmente (nel mio caso Android Studio), o con qualche cosa di dedicato?
- per programmare giochi più o meno complicati, è fortemente consigliato utilizzare questi tool, del tipo che non utilizzandoli ci si mette una vita a fare qualcosa di decente, oppure anche non usandoli si ottengono gli stessi risultati, magari con un po' più di fatica?
Grazie mille anticipatamente a tutti quelli che riusciranno a schiarirmi un po' le idee :)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Eventuali tool per programmare giochi Android
« Risposta #1 il: 07 Marzo 2014, 12:35:51 CET »
0
La domanda non è banale, non è "sbagliata" e non è malposta, anzi.

In breve

risposta 1: Corona non lo conosco, andengine e libgdx sono fondamentalmente framework che importi come librerie.
risposta 2: questi framework li puoi usare col tuo solito ide configurando il progetto il modo che utilizzino andengine/libgdx come librerie.
risposta 3: dipende da cosa vuoi fare, senza questi tool fai molta più fatica all'inizio ma di sicuro alla fine avrai imparato molto di più.

In dettaglio

Parti dal presupposto che tutti utilizzano lo stesso sistema e le stesse API, quindi quello che fa un framework non è niente di più e niente di meno di quello che puoi fare tu.
Ovviamente chi sviluppa il sistema operativo ti mette a disposizione dei sistemi per fare delle cose ma non può mettere bocca su quella che è la tua organizzazione interna alla app.

Come esempio pratico ti prendo una bitmap.

Il sistema mi deve mettere in condizione di caricare una bitmap. Una volta che io ho una bitmap ci faccio quello che mi pare.

A livello base tu scrivi:

Codice (Java): [Seleziona]
Bitmap miabitmap = funzionechecaricalabitmap(idbitmap);
Il ruolo delle API di sistema finisce lì.

Tu hai bisogno di fare una serie di operazioni su questa bitmap e poi passarla ad un oggetto.

Codice (Java): [Seleziona]
funzionechefaqualcosaconlabitmap(miabitmap);
funzionechefaaltroconlabitmap(miabitmap);
miooggetto obj = new miooggetto(miabitmap);

Fin qui tutto ok. Se tu però volessi farlo con 10 oggetti puoi copiare e incollare il codice sopra 10 volte e dichiarare miabitmap2 miabitmap3.. miabitmap9. Va da se che probabilmente ti scriverai una funzione che prende come parametro l'id della bitmap e poi ti restituisce già un miooggetto.

Codice (Java): [Seleziona]
miooggetto obj = funzionechecreaoggettoecaricabitmap(idbitmap);
miooggetto obj2 = funzionechecreaoggettoecaricabitmap(idbitmap2);
...
miooggetto obj9 = funzionechecreaoggettoecaricabitmap(idbitmap9);

Molto più leggibile ma sempre migliorabile. Infatti potresti decidere di usare gli asset invece dei drawable e scrivere su un file i nomi degli asset.

Codice (Java): [Seleziona]
ArrayList<miooggetto> listaoggetti = new ArrayList<miooggetto>;
ArrayList<String> listafile = caricalistafile(idrisorsa);
for( int i = 0; i< listafile.size(); i++ )
listaoggetti.add(creaoggettodaassett(listafile.get(i));

Et voila con 4 righe hai caricato 10 oggetti. Ma sempre con le stesse 4 righe ne potresti caricare anche 1000.

Adesso facciamo un passo in avanti... mentre stai sviluppando il gioco ti accorgi che sarebbe carino che al verificarsi di un certo evento tu potessi cambiare la bitmap associata ad un oggetto. Accidenti!!! Come fare?

Beh a parte aggiungere una setmaterial all'oggetto che è il problema minore, ti ritrovi con 1000 oggetti e tu devi cambiare il materiale dell'oggetto numero 5 per farlo diventare il materiale dell'oggetto 7.

Beh nessuno ti vieta di fare così:

Codice (Java): [Seleziona]
lostaoggetti.get(5).setmaterial(lostaoggetti.get(7).getmaterial());
Questo funziona ma se cambi l'ordine degli oggetti non funziona più. Tra l'altro il materiale che avevi al numero 5 viene sovrascritto dal numero 7.

Allora provi a pensare a come risolvere il problema e probabilmente la soluzione che userai sarà quella di avere un modulo/manager/etc che gestisce il caricamento delle risorse e la creazione degli oggetti. Passando da un manager tu puoi impostare un nome per ogni bitmap. A quel punto il tuo materiale non sarà il materiale dell'oggetto "5" ma magari sarà il materiale con nome "legno" e il materiale dell'oggetto 7 sarà il materiale "asfalto". Lo stesso vale per gli oggetti, potrai settare un nome che identifica gli oggetti invece di usare numeri.

Codice (Java): [Seleziona]
manageroggetti.get("elementodinamico").setmaterial(managermateriali.get("asfalto"));
Una bella differenza di stile, praticità e riusabilità del codice. Riusabilità perché il tuo manager di materiali è diventato così generico che potrai riusarlo per il prossimo gioco che farai... e potrai migliorarlo con il passare del tempo.

Per esempio se di quei 1000 oggetti 900 utilizzano il materiale "legno", che bisogno c'è di caricare 900 volte il legno? E' uno spreco di tempo, di risorse, di memoria e così via. Ecco che quando al tuo manager chiedi di caricare l'asset "nomeasset" che corrisponde al nome "nomemateriale" se lui si accorge di averlo già caricato.. invece di ricaricarlo di nuovo ti restituisce subito il materiale.

Mettiamo che fai un altro gioco e in questo gioco ti accorgi che hai bisogno di cambiare il materiale legno non su un oggetto, ma su tutti quanti. Niente di più semplice, il tuo modulo può cambiare la bitmap incapsulata dentro ad una classe material e magicamente TUTTI gli oggetti che usano quel materiale dal prossimo frame cambiano materiale.

Ecco, quello che hai appena creato è un piccolo framework che puoi utilizzare come libreria in tutti i tuoi progetti e che puoi migliorare col tempo.  ;-)

In pratica usare un framework già fatto ti fa risparmiare tanto tanto tanto lavoro.

Il rovescio della medaglia è che a seconda del framework che usi queste scelte le hanno fatte altri, con le loro regole, il loro modo di progettare il framework, le possibilità che loro hanno deciso di metterti a disposizione.

Quindi se sei più interessato allo sviluppo del gioco il framework già fatto evita perdite di tempo e distrazioni. Se sei più interessato a sapere come funziona "a basso livello" una app complessa in teoria puoi scrivertelo anche da solo. :-)

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Eventuali tool per programmare giochi Android
« Risposta #2 il: 07 Marzo 2014, 14:10:13 CET »
0
Non ho mai sviluppato giochi per Android. Ma un GameEngine che va per la maggiore adesso è Unity.

Penso che potresti trovare più informazioni su di esso su siti e forum specializzati in videogiochi.

Tipo Indivault o Gamedev.

Ciao.

Offline Jybo14

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Windows 7
Re:Eventuali tool per programmare giochi Android
« Risposta #3 il: 07 Marzo 2014, 14:23:31 CET »
0
Ciao,
innanzitutto grazie mille, quando ho fatto questa domanda sul forum non speravo in una risposta così dettagliata e che mi chiarisse tutto in un solo momento :D
Visto che sicuramente sai spiegare le cose che sai e che mi sembri molto informato, ti chiedo, anche se magari è una cosa che varia da persona a persona, tu hai usato "AndEngine", "LibGDX" o altri framework in qualche tuo progetto? Se sì, ce n'è stato uno con cui ti sei trovato meglio che con altri? (maggior reperibilità di "guide" al riguardo, maggiori funzioni, ecc)
Grazie di nuovo intanto :)

Post unito: 07 Marzo 2014, 14:25:28 CET
Grazie della risposta arlabs,
sì, anche di Unity avevo lettto, e in questo caso mi pare ci sia proprio un IDE dedicato, un altro tipo di linguaggio eccetera, o sbaglio?
« Ultima modifica: 07 Marzo 2014, 14:25:28 CET da Jybo14, Reason: Merged DoublePost »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Eventuali tool per programmare giochi Android
« Risposta #4 il: 07 Marzo 2014, 14:40:32 CET »
0
Non conosco minimamente i game engine, però io terrei molto in considerazione quanto spesso viene aggiornato un certo game engine ed il supporto che è possibile ricevere.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Eventuali tool per programmare giochi Android
« Risposta #5 il: 08 Marzo 2014, 00:11:23 CET »
0
Non ho mai usato framework ma ne ho scritti diversi nel corso degli anni. Diciamo che non considero l'opzione di usare un framework già fatto, visto che parte del divertimento starebbe anche nello scrivermelo da solo.

L'unico con cui ho avuto a che fare è stato libgdx perchè avevo letto un libro sulla programmazione android del creatore di libgdx e perchè usa box2d. Mi serviva un motore fisico così ho staccato la libreria box2d da libgdx portandomi dietro giusto quelle classi base che servivano (vettori e matrici, poca roba).

Di supporto e aggiornamenti ce ne sono eccome sia per libgdx che per andengine. Il fatto è che (così rispondo pure a bradipao) quando fai un aggiornamento ad un framework se non è una major release non puoi permetterti di rompere la compatibilità. A quel punto se hai fatto una scelta discutibile te la porti dietro e il massimo che puoi fare è cercare di aggiungere altre funzioni al costo di perdere la pulizia del design originale.

Se in un mio framework decido di fare qualcosa e poi mi accorgo che potevo farla meglio posso decidere in qualunque momento di modificarla. Sta solo a me. Nel caso di libgdx/andengine questo lusso non se lo possono permettere, così come non possono fare una major release al mese, non avrebbe senso.

Esempio di soluzione aberrante a mio avviso è la coordinata Y che aumenta verso l'alto nella telecamera di default con proiezione ortogonale di libgdx. Una scelta totalmente scellerata *.

Quando vedo queste cose mi stupisco. Ci sono parti tecnicamente impressionanti e poi qualcuno se ne esce fuori con scelte incredibili senza capo ne coda.

*infatti poi l'hanno "fixata" permettendoti di creare una telecamera con un sistema di coordinate più sensato, ma di default per compatibilità rimane in quel modo.  :-(

Offline Jybo14

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Windows 7
Re:Eventuali tool per programmare giochi Android
« Risposta #6 il: 09 Marzo 2014, 11:12:22 CET »
0
Già, normalmente anche io non faccio utilizzo di certe strutture di supporto, sia perché mi è più comodo farle da me, sia perché, come dici tu, è parte del divertimento del progetto :)
Però in quanto a programmazione Android per ora ho una conoscenza alquanto scarna, e stavo appunto pensando se utilizzarne o meno qualcuna, ma sono proprio alcuni dei motivi che tu hai elencato a "bloccarmi".
Allo stesso tempo però, sono impaziente di provare a "produrre" qualcosa di più, andando a discapito del resto.
Scusami una domanda più sul "personale", da quanto mi pare di aver capito, tu hai una certa esperienza nella programmazione Android. Se posso, da quanto tempo programmi per questa piattaforma? :)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Eventuali tool per programmare giochi Android
« Risposta #7 il: 09 Marzo 2014, 16:45:04 CET »
0
Se vuoi "produrre" secondo me ti conviene usare un framework, poi dipende molto dalla quantità di tempo che riesci a dedicarci. Se non hai molto tempo il framework può essere una ottima soluzione per non passare settimane e settimane sul codice e non avere ancora niente da rilasciare. Anche se hai un progetto in mente può essere frustrante veder passare il tempo senza avere niente di usabile tra le mani.

Per quanto riguarda la domanda "personale" ci sono tanti utenti in questo forum che hanno molta più esperienza Android di me.. ne cito un paio a caso (non me ne vogliano gli altri): Nicola_D e Bradipao.

Io ho iniziato con Android circa 2 anni fa ma per i miei progetti ci posso dedicare solo il tempo libero. A volte il weekend, a volte la sera dopocena... dipende. Per quello ti dico che può risultare frustrante. Per esempio in questo momento sono dietro ad un progetto che utilizza un mio framework. Il progetto l'ho iniziato circa 2 mesi e mezzo fa e sono a buon punto, ma le prime righe di codice del framework risalgono a un annetto fa. A volte è molto frustrante. Come adesso che è domenica pomeriggio ed invece di essere in giro a godermi una bella giornata di sole sono a scrivere codice! :D