Game Development for Nokia Asha Devices with Java ME #2

Preview:

DESCRIPTION

This presentation is the second one of the Game Development for Nokia Asha Devices with Java ME training

Citation preview

Game Development for Nokia Asha Devices with Java ME

Marlon Luz - INdTNokia Developer Evangelist

@marlonluz

Low-Level UI API• GUI to have control over each pixel in the screen

• Portable among MIDP devices when in the same screen resolution

Displayable

Screen Canvas

TextBoxAlert Form List GameCanvas

Canvas• Canvas is a subclass of Displayable class

• Have to extend the Canvas class•public class Tela extends Canvas {•}

• Overwrite the paint() method• protected void paint(Graphics g) {• // do some painting!• }

Drawing on the screen• import javax.microedition.lcdui.*;

• class MyCanvas extends Canvas {• public MyCanvas() {• super();• super.setFullScreenMode(true);• }

• public void paint(Graphics g) {• g.setColor(255, 255, 0);• g.fillRect(0, 0, getWidth(),• getHeight());• g.setColor(0, 0, 0);• g.drawString("Hello There", • getWidth() / 2, 0, • Graphics.TOP | Graphics.HCENTER);• }• }

Fonts• The Font class can be used to control the way text appears on the Canvas• Atributtes:

• Style• Size• Face

• Fonts usam âncoras com as coordenadas (x,y) para decidir ontem serão desenhadas

Fonts• public void paint(Graphics g) {• Font f =

Font.getFont(Font.FACE_PROPORTIONAL, •

Font.STYLE_UNDERLINED, •

Font.SIZE_LARGE);• g.setFont(f);• g.drawString("System Font", • getWidth()/2, getHeight()/2, • Graphics.TOP | Graphics.HCENTER);• }

Events• The developer is resposible to manage all input events

• Input events are throw when:• A key is pressed ( for keyboard enabled devices)• The screen is touched (for touchscreen devices)• A command is chosen

Events• For keyboard enabled devices use the following methods to capture key events:• keyPressed(int keyCode)• keyReleased(int keyCode)• keyRepeated(int keyCode)

• For touchscreen enabled devices use the following methods to capture touch events:• pointerPressed(int x, int y)• pointerReleased(int x, int y)• pointerDragged(int x, int y)

Events•public class MyCanvas2 extends Canvas {

int x,y; boolean firstTime = true; boolean userHasTouched = false;

public void paint(Graphics g) { if (firstTime) { g.setColor(255, 255, 0); g.fillRect(0, 0, getWidth(), getHeight()); firstTime = false; } if (userHasTouched) { g.setColor(0, 0, 0); g.fillArc(x, y, 5, 5, 0, 360); userHasTouched = false; } } protected void pointerPressed(int x, int y) { this.x = x; this.y = y; userHasTouched = true; repaint(); } }

Sample• Checkers Game

Game API• javax.microedition.lcdui.game package

• Help to develop games quickly and help to reduce the size of the JAR file

• Layers usage to create visual elements, for exemple:• Layer 1 – Background• Layer 2 – Enemy • Layer 3 – Player

Game API - SampleGameCanvas

Sprite

Sprite

Game loop•Game loop is responible to:• Handle player events• Update game logics• Repaint the screen scene• It runs inside a separeted thread

Graphics g = getGraphics();

while (isRunning) {

sleep();

update();

checkColisions();

layerManager.paint(g,0,0);

flushGraphics();

}

Thread• Thread

Sprites - Frames

{0,1,2,3,4,5,6,7,8,9,10,11,12}

Sprite• Simplifies the Sprite management

Image image = Image.createImage(“mysprite.png”);

Sprite sprite = new Sprite(image, 5,5);

• Controls the Sprite movementsprite.move(10,10);

• Checks collisionssprite.collidesWith(otherSprite,false);

sprite.collidesWith(tiledLayer,false);

sprite.collidesWith(otherImage,20,20,false);

• Goes to the next frame of the spriteSprite.nextFrame();

• Controls transformations of the spritesprite.setTransform(Sprite.TRANS_ROT90);

Player inputs•We have to get finger position

• The method pointerPressed(int x, int y) is called when the player touch the finger on the screen

• The method pointerDragged(int x, int y) is called when the player drags the finger on the screen

• The method pointerReleased(int x, int y) is called when the player takes the finger from the screen

protected void pointerPressed(int x, int y) { move = true; moveTO_Y = y;}

Let’s code

Marlon Luzext-marlon.luz@nokia.com

@marlonluz

Thanks