In questo esempio andremo a creare un gioco molto semplice utilizzando LibGdx, un framework di sviluppo di giochi con Java.
Su Android impostiamo un nuovo progetto LibGdx, estendendo la classe Game.
Nel nostro gioco raccoglieremo con un carello la frutta che cade dall’alto. Possiamo utilizzare per le immagini alcuni Sprite sheet scaricati gratuitamente da internet. Quindi andremo a caricare nella cartella assets :
cherries.png
orange.png
limon.png
shoppingCart.png.
Per disegnare le immagini e memorizzare la loro posizione e dimensione andiamo a creare un <Rectangle> che rappresenta shoppingCart e un Array<Rectangle> per le immagini frutta.
Inseriamo la telecamera e nell’ oggetto batch impostando la matrice di proiezione:
batch.setProjectionMatrix(camera.combined).
Ecco il codice:
MyGdxGame.java
package com.mycompany.mygame;
import com.badlogic.gdx.*;
import com.badlogic.gdx.graphics.*;
import com.badlogic.gdx.graphics.g2d.*;
import com.badlogic.gdx.math.*;
import com.badlogic.gdx.utils.*;
import java.util.*;
public class MyGdxGame extends Game
{
Texture image1,image2,image3,
shoppingCartImage;
SpriteBatch batch;
OrthographicCamera camera;
Rectangle shoppingCart;
Array<Rectangle> fruits;
private Long DeltaTime;
@Override
public void create()
{
image1 = new Texture(Gdx.files.internal(“cherries.png“));
image2 = new Texture(Gdx.files.internal(“orange.png“));
image3 = new Texture(Gdx.files.internal(“limon.png“));
shoppingCartImage = new Texture(Gdx.files.internal(“shoppingCart.png“));
camera=new OrthographicCamera();
camera.setToOrtho(false,800,1500);
batch=new SpriteBatch();
shoppingCart=new Rectangle();
shoppingCart.x=800/2-50/2;
shoppingCart.y=20;
shoppingCart.width=50;
shoppingCart.height=50;
fruits= new Array<Rectangle>();
spawnFruit();
}
private void spawnFruit() {
Rectangle fruit= new Rectangle();
fruit.x=MathUtils.random(0,700);
fruit.y=1500;
fruit.width=50;
fruit.height=50;
fruits.add(fruit);
DeltaTime=TimeUtils.nanoTime();
}
@Override
public void render()
{
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(shoppingCartImage,shoppingCart.x,shoppingCart.y);
for (Rectangle fruit:fruits){
batch.draw(image1, fruit.x, fruit.y);
batch.draw(image2, fruit.x, fruit.y/2+50);
batch.draw(image3, fruit.x, fruit.y*2);
}
batch.end();
if(Gdx.input.isTouched()){
Vector3 TouchPoint=new Vector3();
TouchPoint.set(Gdx.input.getX(),
Gdx.input.getY(),0);
camera.unproject(TouchPoint);
shoppingCart.x=TouchPoint.x-50/2;
}
if(TimeUtils.nanoTime()-DeltaTime>1000000000)
spawnFruit();
for(Iterator<Rectangle>iter=fruits.iterator();
iter.hasNext();){
Rectangle fruit=iter.next();
fruit.y-=300*Gdx.graphics.getDeltaTime();
{
if(fruit.overlaps(shoppingCart)){
iter.remove();
}
}
}
}
@Override
public void dispose(){
batch.dispose();
}
}