mercoledì 6 marzo 2013

Prima applicazione in GDX

So bene che e' un giochino di una stupidita' allarmante ma considerando il fatto che e' stato fatto partendo da zero in meno di 3 ore e che puo' essere visualizzato su Android, Ios, Java (ovvero un indefinito universo di computer desktop e portatili) ed HTML5 la cosa diventa qualcosa di piu' di un giochino

Versione Desktop (Java)



Versione Android
la libreria riscala le dimensioni previste per la finestra alle reali dimensioni dello schermo del telefono, per questo motivo l'immagine risulta distorta (in origine la visualizzazione e' in landscape)
----------------------------------------------------

package com.me.mygdxgame;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector3;

public class MyGdxGame implements ApplicationListener {
private OrthographicCamera camera;
private SpriteBatch batch;
private Rectangle droid_s;
private Texture droidImage;
private Texture palloneImage;
private Rectangle pallone_s;
private int speed_x;
private int speed_y;
private Sound ballSound;
private int Screen_width;
private int Screen_height;
private int rimbalzi;
private SpriteBatch spriteBatch;
private BitmapFont font;

@Override
public void create() {
//carica il file degli sprite che sono nella directory assets
//gli sprite devono avere come dimensioni potenze di 2 (in questo caso sono 32x32 pixel)
        droidImage = new Texture(Gdx.files.internal("data/droid.png"));
        palloneImage = new Texture(Gdx.files.internal("data/pallone.png"));
        
        //carica il font contenuto sempre dentro assets
        font = new BitmapFont(Gdx.files.internal("data/arial.fnt"), Gdx.files.internal("data/arial.png"), false);
        spriteBatch = new SpriteBatch(); //per la scritta
        batch = new SpriteBatch(); // per gli sprite 
        
        //carica il suono
        ballSound = Gdx.audio.newSound(Gdx.files.internal("data/palla.wav"));

        //inizializza le variabili
        Screen_width = 800;
        Screen_height = 480;
        rimbalzi = 0;
speed_x = 4 ; //velocita' della palla in pixel
speed_y = -4;

        camera = new OrthographicCamera();
        camera.setToOrtho(false, Screen_width, Screen_height);
        
        //rettangolo del robottino
droid_s = new Rectangle();
droid_s.x = Screen_width/2 - 32 / 2;
droid_s.y = 10;
droid_s.width = 32;
droid_s.height = 32;

//rettangolo della palla
pallone_s = new Rectangle();
pallone_s.x = Screen_width/2 - 32 / 2;
pallone_s.y = Screen_height/2 - 32 / 2;;
pallone_s.width = 32;
pallone_s.height = 32;
}

@Override
//cancella tutto in uscita dal programma
public void dispose() {
droidImage.dispose();
palloneImage.dispose();
batch.dispose();
spriteBatch.dispose();
font.dispose();
ballSound.dispose();
}

@Override
public void render() {
   Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        camera.update();
batch.setProjectionMatrix(camera.combined);
//controlla i rimbalzi
if (pallone_s.x < 0) speed_x = -speed_x;
if (pallone_s.x > 768) speed_x = -speed_x;
if (pallone_s.y == 64)   
{
if ((pallone_s.x >= droid_s.x-32) && (pallone_s.x < droid_s.x+32)) 
{
//se rimbalza sul robottino inverte marcia e fa il suono
speed_y = -speed_y;
ballSound.play();
// aggiorna il numero di rimbalzi
rimbalzi++;


}
}
if (pallone_s.y < 0) //se il pallone esce dal basso reinizia da capo
{
pallone_s.x = Screen_width/2 - 32 / 2;
pallone_s.y = Screen_height/2 - 32 / 2;
speed_x = 4 ;
speed_y = -4;
rimbalzi = 0;
}
if (pallone_s.y > 448) speed_y = -speed_y;
 
//muove la palla
pallone_s.x = pallone_s.x-speed_x;
pallone_s.y = pallone_s.y-speed_y;

//aggiorna lo schermo
batch.begin();
batch.draw(droidImage,droid_s.x,droid_s.y);
batch.draw(palloneImage,pallone_s.x,pallone_s.y);
batch.end();

spriteBatch.begin();
        font.draw(spriteBatch, Integer.toString(rimbalzi), 10, 320);
        spriteBatch.end();

        //gestisce l'input dell'utente e sposta il robottino
        //se non si l'interfaccia touch il robottino si sposta tenendo premendo il tasto
        //e muovendo il mouse
if(Gdx.input.isTouched()) {
        Vector3 touchPos = new Vector3();
        touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0);
        camera.unproject(touchPos);
        droid_s.x = touchPos.x;
     }
}

@Override
public void resize(int width, int height) {
}

@Override
public void pause() {
}

@Override
public void resume() {
}
}

----------------------------------------------------