你對J2ME中使用Canvas製作簡單的遊戲菜單是否熟悉,這裡和大家分享一下,我們知道MIDP的圖形化使用者介面分為兩類,分別是進階圖形化使用者介面和低級使用者介面。一般來講進階圖形化使用者介面類使用起來比較方便,可移植性強,但是程式員對他的控制能力也很低,因為它們的介面表現是由底層控制的,而不是我們控制的。
J2ME中使用Canvas製作簡單的遊戲菜單
我們知道MIDP的圖形化使用者介面分為兩類,分別是進階圖形化使用者介面和低級使用者介面。一般來講進階圖形化使用者介面類使用起來比較方便,可移植性強,但是程式員對他的控制能力也很低,因為它們的介面表現是由底層控制的,而不是我們控制的。相比進階UI類,低級UI類則使用起來更難一些,但是控制能力更強,可以做出自己需要的介面。
Canvas和Graphics是我們必須熟練使用的兩個類,分別代表了畫布和畫筆事實上更豐富,姑且這麼比喻)。而我們則是畫畫的人,而指導我們如何下筆的就是Javadoc了,再加上勤奮努力一定可以畫出不錯的介面。比如tabbed菜單,二級菜單等。這裡我們講述一個簡單菜單的製作方式。
在畫菜單的時候,需要考慮兩面的問題,第一是計算相對位置,讓菜單能夠儘可能適應更多的機型,盡量少使用絕對值。例如畫下面的菜單的時候
我們應該計算菜單的每個條目的高度,這些可以有Font的高度算出,當然你可以給條目留一些padding的距離。還應該計算條目的最寬值,畢竟每個條目的字數不一樣。這樣基本知道了整個菜單占的空間。最後還需要計算菜單在螢幕的位置。菜單的繪製如下所示:
Java代碼
- publicvoidpaint(Graphicsg){
-
- //清除螢幕
-
- intcolor=g.getColor();
-
- g.setColor(0xFFFFFF);
-
- g.fillRect(0,0,getWidth(),getHeight());
-
- g.setColor(color);
-
- //計算整個菜單的高度,寬度和x,y)
-
- intrectWidth=preferWidth;
-
- intrectHeight=preferHeight*LABELS.length;
-
- intx=(getWidth()-rectWidth)/2;
-
- inty=(getHeight()-rectHeight)/2;
-
- //畫矩形
-
- g.drawRect(x,y,rectWidth,rectHeight);
-
- for(inti=1;i<LABELS.length;i++){
-
- g.drawLine(x,y+preferHeight*i,
- x+rectWidth,y+preferHeight*i);
-
- }
-
- //畫菜單選項,並根據selected的值判斷焦點
-
- for(intj=0;j<LABELS.length;j++){
-
- if(selected==j){
-
- g.setColor(0x6699cc);
-
- g.fillRect(x+1,y+j*preferHeight+1,
- rectWidth-1,preferHeight-1);
-
- g.setColor(color);
-
- }
-
- g.drawString(LABELS[j],x+8,y+j*preferHeight+4,
- Graphics.LEFT|Graphics.TOP);
-
- }
-
- }
-
-
-