Autore Topic: [Facile] Primi passi con AndEngine (Sprite e Drag & Drop)  (Letto 8507 volte)

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
[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« il: 24 Aprile 2011, 20:45:14 CEST »
+8
Livello di difficoltà: facile
Target SDK: 4
Min SDK: 4
Link al file compresso del progetto eclipse: file in allegato

AndEngine é un motore 2D per giochi android. É totalmente open source ed é sviluppato da Nicolas Gramlich che, tra l'altro, é admin di anddev.org.

Questo semplice tutorial ci aiuterà a creare il nostro primo progetto usando le API AndEngine.


Per prima cosa importiamo il jar di questo motore.
Creiamo nella directory del nostro progetto una cartella lib in cui andremo a copiare il file andengine.jar



Dopo di che clicchiamo col tasto destro sul nostro progetto e quindi selezioniamo la voce Properties.
Nella finestra che compare clicchiamo su (1) Java Build Path, (2) Add JARs, (3) lib/andengine.jar, e diamo l'ok.



In realtà si può anche evitare di creare la cartella lib e di copiare il file jar al suo interno, però in quel caso lo andremo ad aggiungere tramite "Add external JARs" selezionando la cartella del nostro pc in cui é contenuto.

Dopo avere importato il file di libreria procuriamoci anche un png che poi andremo a caricare nel gioco.

Per farlo creiamo la cartella assets/gfx e ci andiamo a copiare il png scelto.



Ora possiamo passare al codice.

Nel file java dell'activity principale (l'unica che abbiamo) andiamo a copiare questo codice

Codice (Java): [Seleziona]
package com.commabit.tutorialandengine;

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.scene.Scene;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
import org.anddev.andengine.ui.activity.BaseGameActivity;

public class TutorialAndEngine extends BaseGameActivity {

    // ===========================================================
    // Costanti
    // ===========================================================

    private int CAMERA_WIDTH = 480;

    private int CAMERA_HEIGHT = 720;

    // ===========================================================
    // Membri
    // ===========================================================

    private Camera camera;

    private Texture faceTexture;

    private TextureRegion faceTextureRegion;

    // ===========================================================
    // Metodi della classe madre
    // ===========================================================

    /* Qui viene caricato il motore */
    @Override
    public Engine onLoadEngine() {
        /* Inizializziamo la Camera */
        camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

        EngineOptions eo = new EngineOptions(true, ScreenOrientation.PORTRAIT,
                new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);

        /* Costruiamo il motore partendo dalle impostazioni specificate sopra */
        return new Engine(eo);
    }

    /* Qui vengono caricate le risorse */
    @Override
    public void onLoadResources() {
        /* Inizializziamo la Texure */
        faceTexture = new Texture(32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);

        /*
         * Creiamo la TextureRegion a partire dal file png contenuto nella
         * cartella assets/gfx
         */

        faceTextureRegion = TextureRegionFactory.createFromAsset(faceTexture, this, "gfx/face.png",
                0, 0);

        /* Carichiamo la texture nel motore */
        mEngine.getTextureManager().loadTexture(faceTexture);
    }

    @Override
    public Scene onLoadScene() {
        /* Inizializziamo la scena che gestisce il posizionamento delle texture */
        Scene scene = new Scene(1);

        /* Ricaviamo le coordinate del centro della scena */
        final int x = ((CAMERA_WIDTH - faceTextureRegion.getWidth()) / 2);
        final int y = ((CAMERA_HEIGHT - faceTextureRegion.getHeight()) / 2);

        /* Creiamo lo sprite */
        final Sprite face = new Sprite(x, y, faceTextureRegion)
       
        /* Gestiamo il drag & drop */
        {
            @Override
            public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
                    final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
                setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY()
                        - this.getHeight() / 2);
                return true;
            }
        };

        /* Ingrandiamo lo sprite */
        face.setScale(3);

        /* Rendiamo lo sprite "draggabile" */
        scene.registerTouchArea(face);
        scene.setTouchAreaBindingEnabled(true);
       
        /* Inseriamo lo sprite nella scena */
        scene.getLastChild().attachChild(face);

        return scene;
    }

    /*
     * Il codice in questo metodo viene eseguito al completamento del
     * caricamento
     */

    @Override
    public void onLoadComplete() {

    }
}

Dopo di che avviamo la nostra app e otterremo la faccina che potremo trascinare col dito:



Entusiasmante vero? :D

[NB] Tutti i files usati li trovate nei sorgenti allegati. [/NB]
[NB2] C'é la possibilità che alcune informazioni non siano del tutto precise. Di fatto non esiste una documentazione ufficiale e quello che so l'ho imparato sfogliando il forum ufficiale e i sorgenti. [/NB2]

Bibliografia:
Qui trovate i sorgenti degli esempi creati dallo sviluppatore di AndEngine, tra cui quello che vi ho proposto.
« Ultima modifica: 28 Aprile 2011, 14:08:43 CEST da blackgin »
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: [Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #1 il: 25 Aprile 2011, 16:48:11 CEST »
0
Ottimo tutorial :)

Sent from my HTC Desire

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #2 il: 25 Aprile 2011, 21:36:04 CEST »
0
Complimenti ! Bel tutorial. ;-)

Offline ciccioska

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • francescoscalise
    • ciccioska
    • ciccioska
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Ubuntu 10.10 - Windows 7
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #3 il: 04 Maggio 2011, 19:42:58 CEST »
0
Ben fatto , bel tutorial. ;-)

Offline nemophobia

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #4 il: 06 Novembre 2011, 17:04:41 CET »
0
ho una domanda a riguardo, se io voglio sapere le coordinate della sprite dopo il rilascio (per farci dei controlli, ad esempio se le coordinate dopo il drop sono uguali ad altre, far scattare un metodo) come faccio?
Codice (Java): [Seleziona]
* Gestiamo il drag & drop */
        {
            @Override
            public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
                    final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
                setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY()
                        - this.getHeight() / 2);
                return true;
            }
        };

qui noto che mi da le posizioni durente tutto il "movimento" io voglio ricavare quelle finali, come fare?

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] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #5 il: 06 Novembre 2011, 17:30:57 CET »
0
Andando a memoria: quando pSceneTouchEvent é TouchEvent.ACTION_UP le coordinate sono quelle al rilascio.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline nemophobia

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #6 il: 06 Novembre 2011, 17:40:53 CET »
0
Andando a memoria: quando pSceneTouchEvent é TouchEvent.ACTION_UP le coordinate sono quelle al rilascio.
stavo giusto per rispondere che ho risolto esattamente come hai scritto, cioè

Codice (Java): [Seleziona]
if(pSceneTouchEvent.isActionUp()){
                                float x =pSceneTouchEvent.getX();
                                float y =pSceneTouchEvent.getY();
                                //etc etc
                                }

grazie mille per la conferma ^^

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #7 il: 07 Novembre 2011, 00:06:20 CET »
0
Permettetemi, ma anche io qualche tempo fa lavoravo con AndEngine, poi ho rinunciato a causa del fatto che purtroppo i troppi quesiti non trovavano altrettante risposte... Non sarebbe piu' comodo creare un'area del forum apposita in cui e' possibile scambiarsi le varie opinioni a riguardo senza averle disperse?

Magari riusciamo a mettere da parte un bel po' di tricks...:)

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] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #8 il: 07 Novembre 2011, 18:57:51 CET »
0
Permettetemi, ma anche io qualche tempo fa lavoravo con AndEngine, poi ho rinunciato a causa del fatto che purtroppo i troppi quesiti non trovavano altrettante risposte... Non sarebbe piu' comodo creare un'area del forum apposita in cui e' possibile scambiarsi le varie opinioni a riguardo senza averle disperse?

Magari riusciamo a mettere da parte un bel po' di tricks...:)
Io direi di usare quest'area per ora. Non mi sembra ci sia un'attività tale da giustificare una sezione a parte.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline mangusto

  • Utente normale
  • ***
  • Post: 152
  • Respect: +5
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    ZTE Blade
  • Play Store ID:
    Leonardo Preti
  • Sistema operativo:
    Windows 7
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #9 il: 07 Novembre 2011, 19:12:43 CET »
0
Permettetemi, ma anche io qualche tempo fa lavoravo con AndEngine, poi ho rinunciato a causa del fatto che purtroppo i troppi quesiti non trovavano altrettante risposte... Non sarebbe piu' comodo creare un'area del forum apposita in cui e' possibile scambiarsi le varie opinioni a riguardo senza averle disperse?

Magari riusciamo a mettere da parte un bel po' di tricks...:)
E' verissimo che AndEngine ha troppa poca documentazione, comunque il forum di AndEngine e StackOverflow sono due ottime fonti di risposte sull'argomento

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #10 il: 07 Novembre 2011, 21:39:20 CET »
0
E' verissimo che AndEngine ha troppa poca documentazione
E' open source e come molti programmi open source la documentazione è il programma stesso  :-)

E' la frase che dicono molti programmatori di programmi open source quando qualcuno si lamenta della scarsa documentazione.
adb logcat | tee /tmp/logcat | grep TAG

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #11 il: 08 Novembre 2011, 14:30:53 CET »
0
E' open source e come molti programmi open source la documentazione è il programma stesso  :-)

E' la frase che dicono molti programmatori di programmi open source quando qualcuno si lamenta della scarsa documentazione.
Purtroppo certe volte il codice "non parla"...Non che abbia le capacita' per giudicare il codice di AndEngine, ma personalmente, non riuscendo a realizzare alcune cose e non sapendo a chi chiedere per avere risposta (sul forum andengine non sempre rispondono) alla fine ho lasciato perdere anche :(

Offline Bartoloni

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Epad
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #12 il: 08 Luglio 2012, 02:24:27 CEST »
0
con l'ultima versione delle librerie questo esempio va in errore quando eseguito sul device :(
Codice: [Seleziona]
07-08 02:23:44.499: W/dalvikvm(1067): Unable to resolve superclass of Lcom/commabit/tutorialandengine/TutorialAndEngine; (39)
07-08 02:23:44.499: W/dalvikvm(1067): Link of class 'Lcom/commabit/tutorialandengine/TutorialAndEngine;' failed


Offline dansi85

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    NGM Dynamic Star
  • Sistema operativo:
    Windows 7
Re:[Facile] Primi passi con AndEngine (Sprite e Drag & Drop)
« Risposta #13 il: 27 Febbraio 2014, 21:05:05 CET »
0
Ciao, ho provato ad importare il progetto in eclipse, non mi da errori ma quando lo lanci nell'emulatore mi va in errore ed esce il classi Forced Stopped. :-(