Autore Topic: [Facile]"Installazione" AndEngine, minidizionario e LinesExample  (Letto 7377 volte)

Zate

  • Visitatore
[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« il: 21 Novembre 2011, 16:38:19 CET »
+6
Livello di difficolta: facile
Versione SDK utilizzata: 2.2
Link al progetto:
Dato che la documentazione e soprattutto le discussioni in italiano scarseggiano, comincio una piccola serie di tutorial di AndEngine.

Tutti i tutorial che posterò sono presi da QUI, io mi limiterò a spiegarli per diffondere questo fantastico strumento :)

Cominciamo.

Il primo problema è: dove scarico andengine.jar? Probabilmente sono io un po' stupido, ma vi assicuro che ci ho impiegato un po' per trovare l'ultima versione di AndEngine, dato che nella sezione downloads di andengine e andengineexamples non c'è.
Il link è qui: AndEngine Jars - AndEngineWiki
In ogni caso nella cartella lib del mio progetto c'è andengine.jar, questa versione funzionerà sicuramente con gli esempi.

Per fare un po' di ordine, consiglio di creare una cartella "lib" nel progetto ed incollare andengine.jar. Successivamente cliccateci sopra con il tasto destro e poi cliccate su "Build path" e infine su "Add to build path".

Adesso cominceremo ad usare AndEngine, ma prima un minidizionario: la versione originale in inglese è QUI, ma cercherò di tradurla al meglio in italiano. I nomi non li tradurrò, in modo da non fare confusione.

BaseGameActivity
È la radice del gioco, contiene l'Engine (vedi dopo) e crea una SurfaceView dove verranno disegnati tutti i contenuti dell'Engine. C'è sempre esattamente un Engine per ogni BaseGameActivity. Si può procedere da una BaseGameActivity ad un'altra con i normali meccanismi di Android

Engine
Fa procedere il gioco a piccoli passi. Riesce a sincronizzare un disegno periodico e l'aggiornamento della Scene(v. dopo), la quale contiene tutti i contenuti del gioco. Di solito c'è una Scene per Engine, tranne che per il SplitScreenEngine.

IResolutionPolicy
L'IResolutionPolicy fa parte dell'EngineOptions. Dice ad AndEngine cosa fare con schermi di diverse dimensioni. Massimizzerà la dimensione della SurfaceView mantenendo lo stesso rapporto tra le dimensioni. Significa che gli oggetti non saranno distorti mentre la SurfaceView avrà la massima dimensione

Camera
Una Camera definisce il rettangolo di una Scene disegnata sullo schermo, dato che non sempre è visibile l'intera Scene. Di solito c'è una Scene per Scene, tranne che per il SplitScreenEngine. Ci sono sottoclassi che permettono di zoommare e spostare la Camera.

Scene
La classe Scene il contenitore per tutti gli oggetti da disegnare sullo schermo. Una Scene ha uno specifico numero di Layar, i quali possono contenere un (fixed o dynamic) numero di Entity. Ci sono sottoclassi, come CameraScene/HUD/MenuScene che si disegnano nella stessa posizione della Scene, la posizione della Camera non li influenza.

Entity
Un' Entity è un oggetto che può essere disegnato, come Sprite, Rectangles, Text o Lines. Un' Entity ha una posizione/rotazione/scala/colore/ecc.

Texture
Una Texture è un' "immagine" nella memoria del chip grafico. In Android la larghezza e l'altezza di una Texture devono essere una potenza di 2. Pertanto AndEngine assembla una Texture da alcune ITextureSources, così lo spazio può essere utilizzato meglio.

ITextureSource
Un'implementazione di una ITextureSource come AssetTextureSource carica un'immagine in una specifica posizione di una Texture.

TextureRegion
Una TextureRegion definisce un rettangolo su una Texture. Una TextureRegion è utilizzata dagli Sprite per far sapere al sistema quale parte della grande Texture lo Sprite sta mostrando

PhysicsConnector
Un PhysicsConnector aggiorna le AndEngine-Shape(come i Rectangles/Sprite/ecc) quando la loro rappresentazione fisica dei corpi cambia. Una volta utilizzata la fisica(e un PhysicsConnector) con un AndEngine-Shape, si potrà disattivare la fisica calcolata dall' AndEngine chiamando setUpdatePhysics(false) alla Shape. Le modifiche apportate alle AndEngine-Shape non sono riflessi nella fisica, devi chiamare i metodi sull'oggetto che hai usato per creare il PhysicsConnector.

HUD
HUD è l'acronimo di head-up display e rappresenta tutte quelle parti dell'interfaccia posizionate in una certa posizione sul display (per esempio, nei giochi, numero di munizioni, vita, livello ecc.)

Vi consiglio comunque di leggere il dizionario in inglese per una maggiore precisione (di sicuro nella traduzione ho sbagliato qualcosa).
Se non avete capito niente, non abbandonate: molti concetti diventeranno più chiari.

Adesso cominciamo il vero e proprio tutorial:

LinesExample

Questo è davvero molto semplice, ma è comunque necessaria una minima conoscenza di programmazione Android.

Creiamo una classe LinesExample, estendiamo BaseGameActivity e aggiungiamo gli implement methods. Non li useremo tutti (per il momento)
Codice (Java): [Seleziona]
package com.and.engine;

import java.util.Random;

import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.primitive.Line;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.ui.activity.BaseGameActivity;

public class LinesExample extends BaseGameActivity {

        //Numero tra cui scegliere un numero casuale
        private static final long RANDOM_SEED = 1234567890;

        //Larghezza della Camera
        private static final int CAMERA_WIDTH = 320;
        //Altezza della Camera
        private static final int CAMERA_HEIGHT = 480;

        //Numero delle linee da disegnare
        private static final int LINE_COUNT = 1000;

        //Camera
        private Camera mCamera;

        @Override
        public void onLoadComplete() {
                // TODO Auto-generated method stub

        }

        @Override
        public Engine onLoadEngine() {
                // TODO Auto-generated method stub

                //Parametri Camera
                this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

                //Parametri EngineOptions
                EngineOptions eo = new EngineOptions(true, ScreenOrientation.PORTRAIT,
                                new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
                                this.mCamera);

                //Ritorniamo l'Engine con EngineOptions eo
                return new Engine(eo);
        }

        @Override
        public void onLoadResources() {
                // TODO Auto-generated method stub

        }

        @Override
        public Scene onLoadScene() {
                // TODO Auto-generated method stub
                //Dichiariamo la Scene
                final Scene scene = new Scene();
                //Settiamo il colore del backgorund
        scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
       
        //Dichiariamo variabile casuale
        final Random random = new Random(RANDOM_SEED);

        //loop per parametri delle linee
        for(int i = 0; i < LINE_COUNT; i++) {
                final float x1 = random.nextFloat() * CAMERA_WIDTH;
                final float x2 = random.nextFloat() * CAMERA_WIDTH;
                final float y1 = random.nextFloat() * CAMERA_HEIGHT;
                final float y2 = random.nextFloat() * CAMERA_HEIGHT;
               
                final float lineWidth = random.nextFloat() * 5;
               
                //Si dichiara la variabile line
                final Line line = new Line(x1, y1, x2, y2, lineWidth);
               
                //Si setta il colore
                line.setColor(random.nextFloat(), random.nextFloat(), random.nextFloat());

                //Si attacca alla scene, in questo momento appare sullo schermo
                scene.attachChild(line);
        }

        return scene;
        }

}

Il risultato finale è in allegato (altro che Kandinskij ;) ). Il vostro risultato potrebbe essere un po' diverso, cambiate CAMERA_WIDTH e CAMERA_HEIGHT con la vostra risoluzione per avere lo stesso risultato.

Dato che sto imparando anch'io, sto organizzando tutto in una sola app, più o meno come quella ufficiale https://market.android.com/details?id=org.anddev.andengine.examples
Man mano che andrò avanti linkerò la versione aggiornata del mio progetto.

Testato con LG Optimus P500 con Android 2.3.5
« Ultima modifica: 26 Novembre 2011, 10:43:24 CET da Zate »

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #1 il: 22 Novembre 2011, 14:32:44 CET »
0
Bravo !!
Bel lavoro, io per il momento non sono interessato ad Andengine, ma non mi dispiacerebbe dargli un occhio. ;-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Zate

  • Visitatore
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #2 il: 22 Novembre 2011, 15:20:42 CET »
0
Be', se sei interessato alla creazione dei giochi te lo consiglio ;)
Serve solo un po' di pazienza e bisogna smanettare un po' con i vari parametri per capire esattamente cosa fanno dato che non ci sono molte informazioni.

Offline salvatore cino

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s i9000
  • Play Store ID:
    wb apps
  • Sistema operativo:
    ubuntu 11.04
R: [Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #3 il: 23 Novembre 2011, 09:11:33 CET »
0
Ottima iniziativa ti seguiró sicuramente....

Inviato dal mio GT-I9000 usando Tapatalk

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #4 il: 23 Novembre 2011, 09:54:27 CET »
+1
Ottimo, grazie mille!
Anche a me piacerebbe iniziare con AndEngine ma purtroppo la mancanza di fonti per risolvere velocemente un problema me l'han fatto archiviare...

Ti consiglio, comunque, invece di andare a regolare manualmente WIDTH ed HEIGHT della Camera, di usare in onLoadEngine
Codice: [Seleziona]
                        final Display display = getWindowManager().getDefaultDisplay();
                        CAMERA_WIDTH = display.getWidth();
                        CAMERA_HEIGHT = display.getHeight();

Cosi' si impostano in automatico all'avvio :)

In caso di texture grandi e si desideri avere una compatibilita' con varie risoluzioni penso possa andare bene :)

Zate

  • Visitatore
R: [Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #5 il: 23 Novembre 2011, 14:40:07 CET »
0
Non ci avevo pensato. Nei prossimi tutorial seguirò il tuo consiglio :-)

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:R: [Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #6 il: 23 Novembre 2011, 14:43:46 CET »
0
Non ci avevo pensato. Nei prossimi tutorial seguirò il tuo consiglio :-)
Mi fa piacere di aver dato il mio contributo, allora ;)

Aspettero' il prossimo tutorial con ansia, visto che sono parecchio interessato all'argomento.
C'e' anche un altro utente (di cui non ricordo il nome...) pratico nella creazione di giochi (il suo gioco e' Herculeum), non sarebbe male se anche lui ci insegnasse qualcosa (non dico di fare un tutorial, ma magari risolvere piccoli dubbi che affliggono i principianti) :)

Zate

  • Visitatore
R: [Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #7 il: 23 Novembre 2011, 16:35:54 CET »
0
Zappescu, sicuramente ne sa più di me :-)

Offline Elmvor

  • Utente normale
  • ***
  • Post: 166
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 14.04, Windows 8.1
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #8 il: 29 Dicembre 2011, 11:06:14 CET »
0
Ma ci vorrebbe almeno una spiegazione minima del codice altrimenti non è un tutorial xD

Zate

  • Visitatore
R: [Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #9 il: 29 Dicembre 2011, 14:06:32 CET »
0
Cosa non hai capito? :-)

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #10 il: 29 Dicembre 2011, 14:32:14 CET »
0
Ma ci vorrebbe almeno una spiegazione minima del codice altrimenti non è un tutorial xD
Mi sembra ben commentato.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline termoPilucco

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #11 il: 14 Febbraio 2012, 12:28:52 CET »
0
Innanzitutto saluto tutti (sono nuovo  :D )
Stavo proprio oggi cercando di far funzionare andengine su un progetto con SDK 2.2 ma seguendo alcuni tutorial continuo ad ottenere un errore  ( 'Conversion to Dalvik format failed with error 1' ).
Quindi mi tornerebbero utili i due progetti di esempio che hai messo su multiupload.
Solo che sembra che multiupload sia down.
E' possibile caricarli altrove ( o dare i link diretti che già esistono su multiupload )?

Grazie!

Zate

  • Visitatore
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #12 il: 15 Febbraio 2012, 14:53:42 CET »
0
Ciao, scusa per il ritardo. Qui c'è il link del progetto And_Engine.zip - File Shared from Box - Free Online File Storage
Ci potrebbero essere piccole differenze rispetto a quelli precedenti.
Riguardo a 'Conversion to Dalvik Format failed with error 1': penso che sia un problema dei file jar, guarda qui android - &quot;Conversion to Dalvik format failed with error 1&quot; on external Jar - Stack Overflow
Ho notato che eclipse ogni tanto ha dei problemi con le librerie, quindi bisogna spesso fare il clean del progetto o addirittura riavviare eclipse.

Offline termoPilucco

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #13 il: 15 Febbraio 2012, 16:25:08 CET »
0
Ciao, ti ringrazio moltissimo.
Nel frattempo ero riuscito a referenziare direttamente i sorgenti di andEngine, tuttavia credo siano ad una release in cui è cambiata l'interfaccia, quindi gli esempi non si compilano comunque  :D
Adesso ci sbatto ancora un po' la testa.
Ho visto che in inglese si trova tantissima roba, ma fra il mix di versioni e la macchinosità del tutto è difficile iniziare a far funzionare qualcosa.


Zate

  • Visitatore
Re:[Facile]"Installazione" AndEngine, minidizionario e LinesExample
« Risposta #14 il: 15 Febbraio 2012, 16:57:54 CET »
0
Sì, c'è una nuova versione di AndEngine su GitHub, usa GLES 2, quindi le applicazioini create con questa versione GLES 2 saranno compatibili solo con dispositivi con Android 2.2+. Alcuni hanno anche trovato che la velocità diminuisce, consigliano di passare a GLES 2 solo se ce n'è bisogno.