Sau đây, tôi xin giới thiệu tới các bạn một kỹ thuật tạo menu cho game bằng hình ảnh sử dụng các class LayerManager và Sprite trong gói javax.microedition.lcdui.game. Lưu ý, trong ví dụ này, tôi giả định rằng, độ rộng màn hình bằng 240, chiều cao màn hình 308(đây là chiều rộng và chiều cao mặc định trong emulator của Sun Wireless Toolkit). Giao diện của nó như sau:

Ứng dụng bao gồm 2 class: MenuScreen và MenuMidlet, lớp MenuScreen như sau:

import java.io.IOException;

import javax.microedition.lcdui.Canvas;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.game.LayerManager;

import javax.microedition.lcdui.game.Sprite;

/**

*

* @author mobilesprogramming’s blog

*/

public class MenuScreen extends Canvas {

final static String IMG_BACKGROUND = “/back2.png”;

final static String IMG_SELECTED = “/back2_active.png”;

Sprite sprBackground, sprSelected;

LayerManager lmMenu;

MenuMidlet midlet;

final static int N_ITEMS = 6;

final static int ID_NEW_GAME = 0;

final static int ITEM_HEIGHT = 30;

final static int ITEM_WIDTH = 240;

final static int[] posX = new int[N_ITEMS];

final static int[] posY = new int[N_ITEMS];

int selectedIndex = 0; // mac dinh ban dau selectedIndex = 0 <–> chon phan tu dau tien

final static int X0_A = 0;

final static int Y0_A = 60;

static int X0;

static int Y0;

static int viewWidth, viewHeight;

Graphics g;

public MenuScreen(MenuMidlet midlet, int selectedIndex) {

this.midlet = midlet;

this.setFullScreenMode(true);

Image imgBackground = null;

imgBackground = this.createImage(IMG_BACKGROUND);

sprBackground = new Sprite(imgBackground, imgBackground.getWidth(), imgBackground.getHeight());

sprBackground.setPosition(X0, Y0);

viewWidth = imgBackground.getWidth();

viewHeight = imgBackground.getHeight();

//X0 = (getWidth() – imgBackground.getWidth()) / 2;

//Y0 = (getHeight() – imgBackground.getHeight()) / 2;

X0 = (240 – imgBackground.getWidth()) / 2;

Y0 = (308 – imgBackground.getHeight()) / 2;

for (int i = 0; i < N_ITEMS; i++) {

posX[i] = X0_A;

posY[i] = Y0_A + i * ITEM_HEIGHT;

}

this.selectedIndex = selectedIndex;

Image imgSelected = null;

imgSelected = this.createImage(IMG_SELECTED);

sprSelected = new Sprite(imgSelected, ITEM_WIDTH, ITEM_HEIGHT);

lmMenu = new LayerManager();

lmMenu.append(sprSelected);

lmMenu.append(sprBackground);

}

public void keyPressed(int keyCode) {

switch (getGameAction(keyCode)) {

case UP:

selectedIndex = (selectedIndex + N_ITEMS – 1) % N_ITEMS;

break;

case DOWN:

selectedIndex = (selectedIndex + 1) % N_ITEMS;

break;

case FIRE:

this.processMenu();

}

this.repaint();

}

public void paint(Graphics g) {

g.setColor(0xffffff);

g.fillRect(0, 0, getWidth(), getHeight());

g.setColor(150, 150, 150);

sprSelected.setFrame(selectedIndex);

sprSelected.setPosition(posX[selectedIndex], posY[selectedIndex]);

lmMenu.paint(g, X0, Y0);

}

private void processMenu() {

switch (selectedIndex) {

case 0:

this.midlet.processNewGame();

break;

case 1:

this.midlet.processHighScore();

break;

case 2:

this.midlet.processOption();

break;

case 3:

this.midlet.processAbout();

break;

case 4:

this.midlet.processHelp();

break;

case 5:

this.midlet.exit();

}

}

private Image createImage(String img) {

try {

return Image.createImage(img);

} catch (IOException ex) {

ex.printStackTrace();

return null;

}

}

}

Lớp MenuMidlet được xây dựng như sau:

import javax.microedition.lcdui.Canvas;

import javax.microedition.lcdui.Display;

import javax.microedition.midlet.*;

/**

* @author mobilesprogramming’s blog

*/

public class MenuMidlet extends MIDlet {

private Canvas menuScreen;

private Display display;

public void startApp() {

menuScreen = new MenuScreen(this, 0);

display = Display.getDisplay(this);

display.setCurrent(menuScreen);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

notifyDestroyed();

}

/**

* thoat khoi ung dung

*/

public void exit() {

this.destroyApp(true);

}

/**

* xu ly khi chon NewGame trong Menu

*/

public void processNewGame(){

}

/**

* xu ly khi chon HighScore trong Menu

*/

public void processHighScore(){

}

/**

* xu ly khi chon Option trong Menu

*/

public void processOption(){

}

/**

* xu ly khi chon About trong Menu

*/

public void processAbout(){

}

/**

* xu ly khi chon Help trong Menu

*/

public void processHelp(){

}

}

Đây là toàn bộ code và image của chương trình here.

Bạn thấy bài viết này thế nào?