Java e videogiochi - Javaday Roma III Edizione

Java e videogiochi
“Dal mobile al desktop, dal 2D al 3D”
Arturo Montieri
Game Programming Italia
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Agenda
GameProg.it
Il punto di riferimento italiano
La piattaforma Java da un’altra prospettiva
Semplicità ed object oriented nella progettazione dei giochi
Java everywhere: mobile, web, desktop
Uno sguardo da vicino: l’approccio al mobile
Grafica 2D: esempio base “Platform”
Grafica 3D: esempio base “FPS”
Live Demo
Domande
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
La piattaforma Java da un’altra prospettiva
Perché Java?
Semplicità
Object oriented design
Cross platform e virtual machine
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
GameCanvas
Funzionalità di base dello schermo e dei tasti di gioco
Layer
Classe base che rappresenta un elemento visuale nel gioco
Sprite
Rappresenta un oggetto animato nel gioco composto da vari frame
TiledLayer
Rappresenta un livello di gioco costituito da una griglia di celle
LayerManager
Gestisce il rendering dei vari livelli di gioco
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
GameCanvas: il game loop
public class MiniMarioGame extends GameCanvas implements Runnable {
public void run() {
Graphics g = getGraphics();
while(!gameOver) {
//leggi stato dei tasti
checkKeys();
// aggiorna lo stato del gioco
updateGame();
// disegna
renderGame(g);
}
}
}
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
Sprite: gli attori del gioco
Ad uno sprite è associata una immagine che contiene i vari frame dei suoi movimenti
Image imageMario = Image.createImage("/mario_frames.png");
int[] marioFrameSequence = {0, 1, 2, 3, 4, 5};
Sprite sprMario = new Sprite(imageMario, 16, 16);
sprMario.setFrameSequence(marioFrameSequence);
sprMario.defineReferencePixel(8, 8);
.
.
if (RIGHT_PRESSED) {
sprMario.nextFrame();
sprMario.move(3,0);
.
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
TiledLayer: il livello di gioco
Ad un TiledLayer è associata una griglia che contiene i vari elementi grafici del livello
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
TiledLayer: il livello di gioco
Image imageLevel1 = Image.createImage("/level1.png");
TiledLayer level1 = new TiledLayer(MAX_HORIZONTAL_TILES,
MAX_VERTICAL_TILES,
imageLevel1,
TILE_WIDTH,
TILE_HEIGHT);
int[][] levelGrid = {
{0, 0, 4, 5, 0},
{0, 0, 0, 0, 0},
{0, 0, 2, 3, 2},
{0, 0, 0, 0, 0},
{1, 1, 1, 1, 1}};
for (int row=0; row<MAX_VERTICAL_TILES; row++) {
for (int col=0; col<MAX_HORIZONTAL_TILES; col++) {
level1.setCell(col, row, levelGrid[row][col]);
}
}
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
LayerManager: incolliamo il tutto
LayerManager layerManager = new LayerManager();
layerManager.append(sprMario);
layerManager.append(level1);
layerManager.setViewWindow(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
.
.
sprMario.setRefPixelPosition(x, y);
level1.setPosition(xLevel1X, yLevel1);
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 2D: MIDP 2.0 Game API
Demo
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Graphics3D
Gestione contesto grafico 3D e render
Object3D
Classe base che rappresenta un oggetto nello spazio 3D
World
Gestione dello “spazio” contenente i nostri oggetti 3D
Camera
Gestione telecamera
Loader
Gestione caricamento file esterni
Light
Gestione luci
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Transform e Group
Gestione matrici di trasformazioni e raggruppamento degli oggetti 3D
Background
Gestione “sfondo” dell’applicazione
Appearance: Material e Texture2D
Gestione materiali e texture
Mesh: SkinnedMesh e MorphingMesh
Gestione mesh animate
VertexArray e VertexBuffer
Gestione buffer di array di vertici, normali, colori e coordinate texture
RayIntersection
Gestione collisioni
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Costruzione del mondo 3D
level.m3g
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Luci, camera, azione!!!
private Graphics3D g3d;
private World myWorld;
private Camera myCamera;
private Object3D myObjects[];
private Light myLight;
...
//Inizializzazione
setFullScreenMode(true);
g3d = Graphics3D.getInstance();
myObjects = Loader.load("/level.m3g");
myLight = new Light();
myLight.translate(0.0f, 0.0f, -1.0f);
myLight.setMode(Light.AMBIENT);
myLight.setColor(0xFFFFFF);
myCamera = new Camera();
myCamera.setTranslation(camX, camY, camZ);
myCamera.setPerspective(45.0f, width / height, 0.1f, 300.0f);
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Luci, camera, azione!!!
Image2D backgroundImage = loadImage("/nuvole.png");
Background background = new Background();
background.setImage(backgroundImage);
myWorld = (World) myObjects[0];
myWorld.addChild(myLight);
myWorld.addChild(myCamera);
myWorld.setActiveCamera(myCamera);
myWorld.setBackground(background);
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
GameCanvas: il game loop
public class MobileFPSGame extends GameCanvas implements Runnable {
public void run() {
Graphics g = getGraphics();
while(!gameOver) {
//leggi stato dei tasti
checkKeys();
// aggiorna lo stato del gioco
updateGame();
// disegna
renderGame(g);
}
}
}
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
L’interattività: il controllo dei tasti
public void checkKeys() {
if (LEFT_PRESSED)
{
// ruota a sinistra
camAngle += 3.0f;
offsetX = STEP * Math.sin(Math.toRadians(camAngle));
offsetZ = STEP * Math.cos(Math.toRadians(camAngle));
}
if (UP_PRESSED)
{
camZ -= offsetZ;
camX -= offsetX;
}
.
.
}
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Update e Render
public void updateGame() {
myCamera.setOrientation(camAngle, 0f, 1f, 0f);
myCamera.setTranslation(camX, camY, camZ);
}
public void renderGame(Graphics g) {
try {
g3d.bindTarget(g);
g3d.render(myWorld);
} finally {
g3d.releaseTarget();
}
}
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
L’approccio al mobile
Grafica 3D: M3G 3D Mobile Graphics API
Demo
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009
Java e videogiochi
Conclusioni
“La programmazione è un’arte,
la passione è prima di tutto.”
Arturo Montieri - [email protected] – GameProg.it
Javaday Roma III Edizione – 24 gennaio 2009