Upload
marlon-luz
View
1.239
Download
1
Tags:
Embed Size (px)
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