Đoạn mã sau đây mô tả một cách xác định các hành động của trò chơi để từ đó gọi các phương thức thích hợp dựa trên các hành động xảy ra
protected void keyPressed(int keyCode) { switch (getGameAction(keyCode)) { case Canvas.FIRE: shoot(); break; case Canvas.RIGHT: goRight(); break; ... } }
Một lựa chọn nữa là có thể tạo một tham chiếu cho mỗi hành động của trò chơi thông qua quá trình khởi tạo giá trị cho các biến
// Initialization
keyFire = getKeyCode(FIRE); keyRight = getKeyCode(RIGHT); keyLeft = getKeyCode(LEFT); ... // Runtime
protected void keyPressed(int keyCode) { if (keyCode == keyFire) shoot();
else if (keyCode == keyRight) goRight() ...
}
Đoạn mã dưới đây minh họa một số chức năng của Canvas và cách xử lý phím
import javax.microedition.midlet.*; import javax.microedition.lcdui.*;
public class KeyMapping extends MIDlet { private Display display; // The display private KeyCodeCanvas canvas; // Canvas
public KeyMapping() {
display = Display.getDisplay(this); canvas = new KeyCodeCanvas(this); }
protected void startApp() { display.setCurrent( canvas ); }
protected void pauseApp() {}
protected void destroyApp( boolean unconditional ) {} public void exitMIDlet() {
destroyApp(true); notifyDestroyed(); }
}
/*---* Class KeyCodeCanvas*---*/ class KeyCodeCanvas extends Canvas implements CommandListener {
private Command cmExit; // Exit midlet private String keyText = null; // Key code text private KeyCodes midlet;
public KeyCodeCanvas(KeyCodes midlet) { this.midlet = midlet;
// Create exit command and listen for events cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit);
setCommandListener(this); }
protected void paint(Graphics g) { // Clear the background (to white) g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight()); // Set color and draw text
if (keyText != null) { // Draw with black pen g.setColor(0, 0, 0); // Center text
g.drawString(keyText, getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER);
} }
if (c == cmExit) midlet.exitMIDlet(); }
protected void keyPressed(int keyCode) { keyText = getKeyName(keyCode); repaint();
} }