1. gzyueqian
      13424082685
      首頁 > 新聞中心 > > 正文

      分析MIDP低級事件處理機制

      更新時間: 2007-01-19 09:52:26來源: 粵嵌教育瀏覽量:808

        在MIDP事件處理機制中我們講述了如何實現(xiàn)CommandListener和ItemStateListener接口來完成事件處理。但是來自于鍵盤輸入的低級事件是不能由Command來完成的。你必須繼承Canvas類并覆蓋其中的方法來完成低級事件的處理。

        通常低級事件的處理是為了滿足游戲開發(fā)的需要,因為游戲開發(fā)相關(guān)的問題非常復(fù)雜。因此不在這里進(jìn)行闡述,有興趣的朋友可以和我索要相關(guān)的游戲開發(fā)資料。MIDP定義了如下鍵值在Canvas類內(nèi)


    2. KEY_NUM0
    3. KEY_NUM1
    4. KEY_NUM2
    5. KEY_NUM3
    6. KEY_NUM4
    7. KEY_NUM5
    8. KEY_NUM6
    9. KEY_NUM7
    10. KEY_NUM8
    11. KEY_NUM9
    12. KEY_STAR
    13. KEY_POUND

      這些都是按鍵基本值,為了提高程序的可移植性你應(yīng)該經(jīng)可能的使用標(biāo)準(zhǔn)鍵值,當(dāng)然有些手機是觸摸屏的。事件的傳遞是通過如下方法來實現(xiàn)的。


    14. protected void keyPressed(int keyCode)
    15. protected void keyReleased(int keyCode)
    16. protected void keyRepeated(int keyCode)
    17. protected void pointerPressed(int x, int y)
    18. protected void pointerDragged(int x, int y)
    19. protected void pointerReleased(int x, int y)
    20. protected void showNotify()
    21. protected void hideNotify()
    22. protected abstract void paint(Graphics g)
    23. commandAction() method of the CommandListener interface

          開發(fā)者應(yīng)該繼承Canvas類的同時覆蓋相應(yīng)的方法來實現(xiàn)低級事件的處理,低級事件的處理是連續(xù)的、串行的,在前面的事件返回之前后面的事件不會執(zhí)行,當(dāng)然也有例外,你可以參考API doc得到答案。針對上面的幾個方法我簡單介紹一下,前三個函數(shù)是針對按鍵事件處理的,獲得用戶的按鍵值后進(jìn)行相關(guān)的事件處理,有一點需要注意,并不是所有的設(shè)備都支持keyRepeat特性,因此在使用之前你應(yīng)該通過hasRepeatEvents()函數(shù)來判斷,接下來的三個函數(shù)是針對觸摸屏式的設(shè)備的,它以屏幕上的點的位置位參數(shù),注意在使用他們以前應(yīng)該判斷設(shè)備是不是支持這個特性,使用hasPointerEvents()判斷,后面的兩個函數(shù)是屏幕被顯示和被隱藏的時候觸發(fā)的。paint()和commandAction()大家肯定都很熟悉了,paint()在Canvas被初始化或者調(diào)用repaint()的時候執(zhí)行。
          下面是一個例子,它的功能就是在屏幕上顯示出你按下鍵的鍵值,界面非常簡單因此沒有抓圖。代碼如下所示:

      import javax.microedition.lcdui.Display;
      import javax.microedition.midlet.MIDlet;
      import javax.microedition.midlet.MIDletStateChangeException;
      public class LowLevelMIDlet extends MIDlet
      {



    24.  private Display display;
          private KeyCanvas keyCanvas;


          protected void startApp() throws MIDletStateChangeException
          {
              display = Display.getDisplay(this);
              keyCanvas = new KeyCanvas();
              display.setCurrent(keyCanvas);


          }

          protected void pauseApp()
          {
          }

          protected void destroyApp(boolean arg0) throws MIDletStateChangeException
          {
          }


      }

      import javax.microedition.lcdui.Canvas;
      import javax.microedition.lcdui.Command;
      import javax.microedition.lcdui.CommandListener;
      import javax.microedition.lcdui.Displayable;
      import javax.microedition.lcdui.Graphics;



      public class KeyCanvas extends Canvas implements CommandListener
      {
          private String key = "Press any key";

          protected void paint(Graphics g)
          {
              g.setColor(255, 255, 255);
              g.fillRect(0, 0, getWidth(), getHeight());
              g.setColor(0, 0, 0);
              g.drawString(key, getWidth() / 2, getHeight() / 2, Graphics.TOP
                      | Graphics.HCENTER);


          }


          public void keyPressed(int keyCode)
          {
              key = keyCode + " is pressed";
              repaint();
          }


          public void keyReleased(int keyCode)
          {
              key = keyCode + " is released";
              repaint();
          }


        
          public void commandAction(Command arg0, Displayable arg1)
          {

          }


      }

    25. 免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲人成电影在线看片 | 一本一本久久a久久精品综合麻豆 | 色婷婷亚洲一区二区 | 天天视频2021国产 | 亚洲婷婷丁香五月综合图 | 亚洲中文字幕 久久久 |