要處理低級事務或者進行屏幕畫圖,那麼我們必須要使用Canvas。一般要編寫手機游戲也是需要Canvas來
制作,它提供了處理鍵盤,手寫筆以及游戲的圖形處理功能。
因為Canvas由Displayable繼承來的,所以具有addCommadn()方法,也可一和Commadn其他屬性配合組
成高級事務處理。Screen於Canvas有相同的特性,但是Screen允許開發人員自定義監聽器,但是Canvas不
允許。
低級事務處理一般分兩種,一種來此鍵盤,一種就是手寫筆。
首先我們來看看處理鍵盤的代碼
/**
* @author You Li
*
* CopyRight (C) 2005
*/
import Javax.microedition.midlet.*;
import Javax.microedition.lcdui.*;
public class LLEventMIDlet extends MIDlet {
/**
*
*/
private Display display;
public LLEventMIDlet() {
display = Display.getDisplay(this);
}
/* (非 Javadoc)
* @see Javax.microedition.midlet.MIDlet#startApp()
*/
protected void startApp() throws MIDletStateChangeException {
// TODO 自動生成方法存根
MyCanvas mc = new MyCanvas() ;
display.setCurrent(mc) ;
}
/* (非 Javadoc)
* @see Javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void pauseApp(){
// TODO 自動生成方法存根
}
/* (非 Javadoc)
* @see Javax.microedition.midlet.MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自動生成方法存根
}
class MyCanvas extends Canvas{
String action = "" ;
public void paint(Graphics g){
// 清除屏幕
g.setColor(255,255,255) ;
g.fillRect(0,0,getWidth(),getHeight()) ;
g.setColor(0,0,0) ;
// 檢查是否支持長按鍵行為
if(hasRepeatEvents()){
g.drawString("Repeat",10,10,0) ;
}else{
g.drawString("NonRepeat",10,10,0) ;
}
g.drawString(action,10,20,0) ;
}
protected void keyPressed(int keyCode){
action = "KP:" + (char)keyCode ;
repaint();
}
protected void keyReleased(int keyCode){
action = "KR:" + (char)keyCode ;
repaint();
}
protected void keyRepeated(int keyCode){
action = "KRe:" + (char)keyCode ;
repaint();
}
}
}
這個程序將會響應手機的鍵盤行為,然後將點擊的鍵盤所對應的鍵值顯示出來。從這個程序中我們可
以發現當Canvas子類成為正在響應的畫面的時候只要點擊鍵盤就會引發keyPressed()方法。松開的時候會
響應keyReleased()方法。而支持長按鍵響應的方法則是keyRepeated()方法(這個方法並不是所有的機器
都支持,比方說N記的6110我以前用的時候就沒有這個響應產生。所以必須要判斷一下。而判斷是否支持
長按鍵響應的方法是hasRepeatEvents())。KEY_NUM0~~KEY_NUM9,以及KEY_STAR、KEY_POUND是所有機器
都支持的常數,而根據設備的不同也會有不同的其他對應值。為了程序能夠跨平台(呵呵,這可是Java的
最大優勢之一哦),在開發的時候不到特殊情況最好只使用這幾個常規鍵盤響應。當然,為了游戲設計的
方便,在MIDP中Canvas定義了幾個Game鍵盤代碼:UP
,DOWN,LEFT,RIGHT,FIRE,GAME_A,GAME_B,GAME_C,GAME_D。同時定義了getGameAction()以及getKeyCode()
兩個方法。來處理相關的行為轉化。
手寫筆控制事件處理,由於俺沒有相關設備也沒有下模擬器,所以就沒有仔細的研究,大概的看了一
下幾個比較重要的東西。手寫筆點擊屏幕,引發pointerPressed()方法,並傳入點擊點在屏幕上的x,y坐
標。pointerReleased()則在手寫筆離開屏幕的時候響應。而pointerDragged()則是手寫筆在屏幕上的移
動時響應的方法,同時會產生相應的x,y坐標。如果我們開發程序需要跨平台,支持在響應手寫筆事務處
理之前必須要使用hasPointerEvents()來判斷設備是否支持手寫筆。hASPointerMotionEvents()則會判斷
是否支持手寫筆在屏幕上移動產生pointerDragged()方法。
當然,還有繪圖處理以及呼叫處理。。。實在是怕自己一下下接受不了那麼多概念。。。呵呵,准備
休息一下。這幾天好好的把自己前幾天看的東西再看看。溫故而知新嘛^_^
============================================
最後想說說,因為這段時間看我寫這個筆記的朋友也很多,但是總是沒有人回應。讓我覺得郁悶,我
只是希望能起到一個拋磚引玉的作用,希望更多的兄弟一起來學習,共同提高,也來幫幫小弟一下。。呵
呵。。。希望大家留個言哦。。^_^