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:
Không chỉ dừng lại ở việc sử dụng nguyên liệu cao cấp, mỗi công trình còn được "chăm sóc" bằng 4 dịch vụ xuất sắc của Tre Nghệ. Từ việc tư vấn, thiết kế đến thi công và hoàn thiện, mọi quy trình đều...
Chất Lượng và Sáng Tạo: Kiến Trúc...