日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
J2ME中調(diào)用Canvas制作游戲菜單

你對(duì)J2ME中使用Canvas制作簡單的游戲菜單是否熟悉,這里和大家分享一下,我們知道MIDP的圖形用戶界面分為兩類,分別是高級(jí)圖形用戶界面和低級(jí)用戶界面。一般來講高級(jí)圖形用戶界面類使用起來比較方便,可移植性強(qiáng),但是程序員對(duì)他的控制能力也很低,因?yàn)樗鼈兊慕缑姹憩F(xiàn)是由底層控制的,而不是我們控制的。

J2ME中使用Canvas制作簡單的游戲菜單

我們知道MIDP的圖形用戶界面分為兩類,分別是高級(jí)圖形用戶界面和低級(jí)用戶界面。一般來講高級(jí)圖形用戶界面類使用起來比較方便,可移植性強(qiáng),但是程序員對(duì)他的控制能力也很低,因?yàn)樗鼈兊慕缑姹憩F(xiàn)是由底層控制的,而不是我們控制的。相比高級(jí)UI類,低級(jí)UI類則使用起來更難一些,但是控制能力更強(qiáng),可以做出自己需要的界面。

Canvas和Graphics是我們必須熟練使用的兩個(gè)類,分別代表了畫布和畫筆(事實(shí)上更豐富,姑且這么比喻)。而我們則是畫畫的人,而指導(dǎo)我們?nèi)绾蜗鹿P的就是Javadoc了,再加上勤奮努力一定可以畫出不錯(cuò)的界面。比如tabbed菜單,二級(jí)菜單等。這里我們講述一個(gè)簡單菜單的制作方式。

在畫菜單的時(shí)候,需要考慮兩面的問題,***是計(jì)算相對(duì)位置,讓菜單能夠盡可能適應(yīng)更多的機(jī)型,盡量少使用絕對(duì)值。例如畫下面的菜單的時(shí)候

我們應(yīng)該計(jì)算菜單的每個(gè)條目的高度,這些可以有Font的高度算出,當(dāng)然你可以給條目留一些padding的距離。還應(yīng)該計(jì)算條目的最寬值,畢竟每個(gè)條目的字?jǐn)?shù)不一樣。這樣基本知道了整個(gè)菜單占的空間。***還需要計(jì)算菜單在屏幕的位置。菜單的繪制如下所示:

Java代碼

 
 
 
  1. publicvoidpaint(Graphicsg){
  2. //清除屏幕
  3. intcolor=g.getColor();
  4. g.setColor(0xFFFFFF);
  5. g.fillRect(0,0,getWidth(),getHeight());
  6. g.setColor(color);
  7. //計(jì)算整個(gè)菜單的高度,寬度和(x,y)
  8. intrectWidth=preferWidth;
  9. intrectHeight=preferHeight*LABELS.length;
  10. intx=(getWidth()-rectWidth)/2;
  11. inty=(getHeight()-rectHeight)/2;
  12. //畫矩形
  13. g.drawRect(x,y,rectWidth,rectHeight);
  14. for(inti=1;i
  15. g.drawLine(x,y+preferHeight*i,
  16. x+rectWidth,y+preferHeight*i);
  17. }
  18. //畫菜單選項(xiàng),并根據(jù)selected的值判斷焦點(diǎn)
  19. for(intj=0;j
  20. if(selected==j){
  21. g.setColor(0x6699cc);
  22. g.fillRect(x+1,y+j*preferHeight+1,
  23. rectWidth-1,preferHeight-1);
  24. g.setColor(color);
  25. }
  26. g.drawString(LABELS[j],x+8,y+j*preferHeight+4,
  27. Graphics.LEFT|Graphics.TOP);
  28. }
  29. }

#p#第二個(gè)重要的問題是:焦點(diǎn)的切換,在高級(jí)UI類中,這是不需要我們處理的。但是使用Canvas制作菜單需要自己來處理焦點(diǎn)的移動(dòng),這里我們定義一個(gè)int類型變量selected,來記錄焦點(diǎn)所在的菜單條目位置,也就是選擇的索引。當(dāng)用戶按鍵的時(shí)候,我們?cè)趉eyPressed()方法中判斷用戶的移動(dòng)方向,對(duì)selected進(jìn)行相關(guān)的加減運(yùn)算,然后repaint()整個(gè)屏幕即可。

Java代碼

 
 
 
  1. publicvoidkeyPressed(intkeyCode){
  2. //根據(jù)用戶輸入更新selected的值,并重新繪制屏幕
  3. intaction=this.getGameAction(keyCode);
  4. switch(action){
  5. caseCanvas.FIRE:
  6. printLabel(selected);
  7. break;
  8. caseCanvas.DOWN:
  9. selected=(selected+1)%4;
  10. break;
  11. caseCanvas.UP:{
  12. if(--selected<0){
  13. selected+=4;
  14. }
  15. break;
  16. }
  17. default:
  18. break;
  19. }
  20. repaint();
  21. serviceRepaints();
  22. }

這樣我們就制作出了一個(gè)基本的菜單,你還可以發(fā)揮想象給被選中的菜單增加動(dòng)畫效果。MenuCanvas的代碼如下所示:

Java代碼

 
 
 
  1. packagecom.j2medev.chapter3;
  2. importjavax.microedition.lcdui.*;
  3. publicclassMenuCanvasextendsCanvas{
  4. //selected變量標(biāo)記了焦點(diǎn)位置
  5. privateintselected=0;
  6. privateintpreferWidth=-1;
  7. privateintpreferHeight=-1;
  8. publicstaticfinalint[]OPTIONS={0,1,2,3};
  9. publicstaticfinalString[]LABELS={"NewGame",
  10. "Setttings","HighScores","Exit"};
  11. publicMenuCanvas(){
  12. selected=OPTIONS[0];
  13. //計(jì)算菜單選項(xiàng)的長度和高度值
  14. FontFontf=Font.getDefaultFont();
  15. for(inti=0;i
  16. inttemp=f.stringWidth(LABELS[i]);
  17. if(temp>preferWidth){
  18. preferWidth=temp;
  19. }
  20. }
  21. preferWidthpreferWidth=preferWidth+2*8;
  22. preferHeight=f.getHeight()+2*4;
  23. }
  24. publicvoidpaint(Graphicsg){
  25. //清除屏幕
  26. intcolor=g.getColor();
  27. g.setColor(0xFFFFFF);
  28. g.fillRect(0,0,getWidth(),getHeight());
  29. g.setColor(color);
  30. //計(jì)算整個(gè)菜單的高度,寬度和(x,y)
  31. intrectWidth=preferWidth;
  32. intrectHeight=preferHeight*LABELS.length;
  33. intx=(getWidth()-rectWidth)/2;
  34. inty=(getHeight()-rectHeight)/2;
  35. //畫矩形
  36. g.drawRect(x,y,rectWidth,rectHeight);
  37. for(inti=1;i
  38. g.drawLine(x,y+preferHeight*i,
  39. x+rectWidth,y+preferHeight*i);
  40. }
  41. //畫菜單選項(xiàng),并根據(jù)selected的值判斷焦點(diǎn)
  42. for(intj=0;j
  43. if(selected==j){
  44. g.setColor(0x6699cc);
  45. g.fillRect(x+1,y+j*preferHeight+1,
  46. rectWidth-1,preferHeight-1);
  47. g.setColor(color);
  48. }
  49. g.drawString(LABELS[j],x+8,y+j*preferHeight+4,
  50. Graphics.LEFT|Graphics.TOP);
  51. }
  52. }
  53. publicvoidkeyPressed(intkeyCode){
  54. //根據(jù)用戶輸入更新selected的值,并重新繪制屏幕
  55. intaction=this.getGameAction(keyCode);
  56. switch(action){
  57. caseCanvas.FIRE:
  58. printLabel(selected);
  59. break;
  60. caseCanvas.DOWN:
  61. selected=(selected+1)%4;
  62. break;
  63. caseCanvas.UP:{
  64. if(--selected<0){
  65. selected+=4;
  66. }
  67. break;
  68. }
  69. default:
  70. break;
  71. }
  72. repaint();
  73. serviceRepaints();
  74. }
  75. //showNotify()在paint()之前被調(diào)用
  76. publicvoidshowNotify(){
  77. System.out.println("showNotify()iscalled");
  78. }
  79. privatevoidprintLabel(intselected){
  80. System.out.println(LABELS[selected]);
  81. }
  82. }

文章題目:J2ME中調(diào)用Canvas制作游戲菜單
標(biāo)題URL:http://m.5511xx.com/article/dhdgece.html