Sprite in J2ME Game
Saturday, 29. August 2009, 22:48:50
Một ví dụ đơn giản về cách dùng Sprite trong Mobile Game:
ExampleGameCanvas.java
Mã:
package com.game;import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;/** * * @author SmallCode_ws */public class ExampleGameCanvas extends GameCanvas implements Runnable { private boolean isPlay; // Game Loop runs when isPlay is true private long delay; // To give thread consistency private int currentX, currentY; // To hold current position of the 'X' private int width; // To hold screen width private int height; // To hold screen height // Sprites to be used private Sprite sprite; private Sprite nonTransparentSprite; // Constructor and initialization public ExampleGameCanvas() throws Exception { super(true); width = getWidth(); height = getHeight(); currentX = width / 2; currentY = height / 2; delay = 20;try{// Load Images to Sprites Image image = Image.createImage("/1.png"); sprite = new Sprite (image,80,80); Image imageTemp = Image.createImage("/2.png"); nonTransparentSprite = new Sprite (imageTemp,80,80); }catch(Exception e){ System.out.println("Image Load error"); } }// Automatically start thread for game loop public void start() { isPlay = true; Thread t = new Thread(this); t.start(); }public void stop() { isPlay = false;} // Main Game Loop public void run() { Graphics g = getGraphics(); while (isPlay == true) { input(); drawScreen(g); try { Thread.sleep(delay); } catch (InterruptedException ie) {} }}// Method to Handle User Inputs private void input() { int keyStates = getKeyStates(); sprite.setFrame(0); // Left if ((keyStates & LEFT_PRESSED) != 0) { currentX = Math.max(0, currentX - 1); sprite.setFrame(1); }// Right if ((keyStates & RIGHT_PRESSED) !=0 ) if ( currentX + 5 < width) { currentX = Math.min(width, currentX + 1); sprite.setFrame(3); }// Up if ((keyStates & UP_PRESSED) != 0) { currentY = Math.max(0, currentY - 1); sprite.setFrame(2); }// Down if ((keyStates & DOWN_PRESSED) !=0) if ( currentY + 10 < height) { currentY = Math.min(height, currentY + 1); sprite.setFrame(4); }}// Method to Display Graphics private void drawScreen(Graphics g) { g.setColor(0xFF0000); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0x0000ff); // display sprites sprite.setPosition(currentX,currentY); sprite.paint(g); nonTransparentSprite.paint(g); flushGraphics(); }}
GCanvas.java
Mã:
package com.game; import javax.microedition.midlet.*;import javax.microedition.lcdui.*; /** * @author SmallCode_ws */public class GCanvas extends MIDlet { private Display display; public void startApp() { try {display = Display.getDisplay(this);ExampleGameCanvas gameCanvas = new ExampleGameCanvas();gameCanvas.start();display.setCurrent(gameCanvas);} catch (Exception ex) {System.out.println(ex);} }public Display getDisplay() { return display; } public void pauseApp() { } public void destroyApp(boolean unconditional) { exit(); } public void exit() { System.gc(); destroyApp(false); notifyDestroyed(); }}
View more random threads:
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...