RSS
热门关键字:  jsp信息管理  jsp  学生管理  孙鑫  西門掃雪
当前位置 :| 首页>J2ME技术>

J2ME手机游戏:按键事件

来源:JAVA世界 作者:www.javaif.com 时间:2008-06-21 Tag: 点击:

 适合接收按键的事件在个人所定义的按键范围内,MIDP应用为每一个按键事件分配一个按键码。按键数值码对每个按键来说都是唯一的,MIDP定义的按键码值为:KEY_NUM0、KEY_NUM1、KEY_NUM2、KEY_NUM3、KEY_NUM4、 KEY_NUM5、KEY_NUM6、KEY_NUM7、KEY_NUM8、KEY_NUM9、KEY_STAR和KEY_POUND (这些按键数值依据ITU-T电话按键规范制定)。分别定义出0~9与“×”及“#”“……”等按键。
    l  public static final int KEY_NUM0
    ITU-T key按键编码为48。
    l  public static final int KEY_NUM1
    ITU-T key按键编码为49。
    l  public static final int KEY_NUM2
    ITU-T key按键编码为50。
    l  public static final int KEY_NUM3
    ITU-T key按键编码为51。
    l  public static final int KEY_NUM4
    ITU-T key按键编码为52。
    l  public static final int KEY_NUM5
    ITU-T key按键编码为53。
    l  public static final int KEY_NUM6
    ITU-T key按键编码为54。
    l  public static final int KEY_NUM7
    ITU-T key按键编码为55。
    l  public static final int KEY_NUM8
    ITU-T key按键编码为56。
    l  public static final int KEY_NUM9
    ITU-T key按键编码为57。
    l  public static final int KEY_START
    ITU-T key的“star”(×),按键编码为42。
    l  public static final int KEY_POUND
    ITU-T key的“pound”(#),按键编码为35。

    请注意,ITU-T的按键控制只能运用在手机所有可见的数字按键上,并不能控制象第四章介绍的高级用户界面的软键盘,这两者必须要区分清楚。

    明白如何调用手机按键后,接着就要说明如何控制按键。主要的控制方法在Canvas类中定义,各个方法调用根据ITU-T提供的按键码作为传入参数,示例6-1为手机界面提供动作,主要函数应用如下:
    l  public int getKeyName(int KeyCode)
    取得单击按键的数字信息,也就是当玩家单击手机任何一个按键时,可由这个函数取得对应的按键数字。
    l  public protected void keyReleased
    (int keyCode)
    当释放按键时调用。调用getGameAction()方法能够判断游戏的动作,而且可以判断任意按键动作。KeyCode为ITU-T的按键码。
    l  public protected void keyPressed
      (int keyCode)
    当单击按键时调用。KeyCode为ITU-T的按键码。
    l  public protected void keyRepeated
      (int keyCode)

    当持续单击按键时调用。KeyCode为传入的ITU-T按键码,在按键过程中持续保持该参数值。本函数的应用要看手机是否提供此功能,并非所有手机都支持这项功能,所以提供另一个判断函数hasRepeatEvents来取得信息。
    l  public protected void
    hasRepeatEvents()
    判断是否支持持续按键动作。
    示例6-1
    /×
      ITU-T按键码程序测试
    ×/
    import javax.microedition.midlet.×;
    import javax.microedition.lcdui.×;
    public class keyAction1 extends MIDlet implements CommandListener
    {
       Display display;
       //声明一个List清单
       List  list;
       Command okCommand;
       //声明一个Canvas画板
       canvasScreen canvasscreen;
       public keyAction1()
       {
          canvasscreen=new canvasScreen();
          //创建一个显示组件
          display=Display.getDisplay(this);
          //创建一个List清单,为IMPLICIT类型
          list=new List("List按键控制", List.IMPLICIT);
          //创建一个确认命令
          okCommand = new Command("确认", Command.OK, 2);
          //作为item选项加入List清单
          list.append("ITU-T按键控制", null);
          list.append("离开", null);
          //将List清单加入到命令
          list.addCommand(okCommand);
          //运行将命令加入到List清单
          list.setCommandListener(this);
       }
       public void startApp()
       {
          //显示清单List界面
          display.setCurrent(list);
       }
       public void pauseApp(){}
       public void destroyApp(boolean unconditional){}
       public void commandAction(Command cmd, Displayable disp)
       {
          if (cmd == okCommand)
          {
             //判断清单软键盘运行的选项
             switch(list.getSelectedIndex())
             {
                //选择第一项

  case 0:
                     //运行画板显示
                     display.setCurrent(canvasscreen);
                     break;
                //选择离开程序
                case 1:
                     destroyApp(false);
                     notifyDestroyed();
                     break;
             }
          }
       }
     
       //运行画板程序应用
       class canvasScreen extends Canvas
       {
          String  checkKey="";
          String  checkkeyName="";
          Image  handImage;
          Image  keyImage;
          String[ ] maxString={"UP", "SOFT1", "LEFT", "SELECT", "RIGHT", "SOFT2", "DOWN",
    "SEND", "CLEAR", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                           "ASTERISK","0","POUND"
                          };
        int[ ]  maxisX={ 85, 40, 60, 85, 110, 130, 85, 30, 85, 35, 85, 135, 35, 85, 135, 35, 85, 135, 35, 85, 135
                       };
        int[ ]  maxisY={ 48, 55, 55, 55, 55, 55, 65, 70, 85, 95, 105, 95, 115, 125,115, 135, 145, 135, 155, 165, 155
                       };
          public canvasScreen()
          {
             try{
                 handImage=Image.createImage("/hand.png");
                 keyImage=Image.createImage("/key.png");
             }catch(Exception ex){}
          }
      
          //调用释放手机按键程序
          public void keyReleased(int keyCode)
          {
             checkKey="release";
             //判断释放按键所代表的ITU-T按键码
             checkkeyName=getKeyName(keyCode);
             //重新绘制Canvas的画板板面
             repaint();
          }
        
          //调用单击手机按键程序
          public void keyPressed(int keyCode)
          {
             checkKey="pound";
             //判断单击按键所代表的ITU-T按键码
             checkkeyName=getKeyName(keyCode);

          //重新绘制Canvas的画板界面
             repaint();
          }
          public void paint(Graphics g)
          {
          g.setColor(0xffffff);
          g.fillRect(0,0,getWidth(),getHeight());
          g.setColor(0);
          g.drawString("Canvas类按键应用", 40, 5, Graphics.LEFT | Graphics. TOP);
          g.drawString("按键状态:", 10, 20, Graphics.LEFT | Graphics.TOP);
             //判断按键码并显示到画板上
             if(checkKey.equals("release"))
          g.drawString("释放的按键码为:"+checkkeyName, 60, 20, Graphics. LEFT |
    Graphics.TOP);
          if(checkKey.equals("pound"))
          g.drawString("单击的按键码为:"+checkkeyName, 60, 20, Graphics. LEFT |
    Graphics.TOP);
          g.drawImage(keyImage, 15, 40,Graphics.LEFT | Graphics.TOP);
           
             for(int i=0; i<maxString.length;i++)
                if(maxString[i].equals(checkkeyName))
          g.drawImage(handImage, maxisX[i], maxisY[i], Graphics.LEFT | Graphics.TOP);
          }
       }
    }

    运行结果如图6-3所示。


图6-3

    【说明】

    从按键程序示例6-1中可以看到,当设计者单击手机键盘的按键时就会显示在画面中。同时也可以了解当前按键动作的状态。也可以明白如何设计游戏中的按键控制。

 适合接收按键的事件在个人所定义的按键范围内,MIDP应用为每一个按键事件分配一个按键码。按键数值码对每个按键来说都是唯一的,MIDP定义的按键码值为:KEY_NUM0、KEY_NUM1、KEY_NUM2、KEY_NUM3、KEY_NUM4、 KEY_NUM5、KEY_NUM6、KEY_NUM7、KEY_NUM8、KEY_NUM9、KEY_STAR和KEY_POUND (这些按键数值依据ITU-T电话按键规范制定)。分别定义出0~9与“×”及“#”“……”等按键。
    l  public static final int KEY_NUM0
    ITU-T key按键编码为48。
    l  public static final int KEY_NUM1
    ITU-T key按键编码为49。
    l  public static final int KEY_NUM2
    ITU-T key按键编码为50。
    l  public static final int KEY_NUM3
    ITU-T key按键编码为51。
    l  public static final int KEY_NUM4
    ITU-T key按键编码为52。
    l  public static final int KEY_NUM5
    ITU-T key按键编码为53。
    l  public static final int KEY_NUM6
    ITU-T key按键编码为54。
    l  public static final int KEY_NUM7
    ITU-T key按键编码为55。
    l  public static final int KEY_NUM8
    ITU-T key按键编码为56。
    l  public static final int KEY_NUM9
    ITU-T key按键编码为57。
    l  public static final int KEY_START
    ITU-T key的“star”(×),按键编码为42。
    l  public static final int KEY_POUND
    ITU-T key的“pound”(#),按键编码为35。

    请注意,ITU-T的按键控制只能运用在手机所有可见的数字按键上,并不能控制象第四章介绍的高级用户界面的软键盘,这两者必须要区分清楚。

    明白如何调用手机按键后,接着就要说明如何控制按键。主要的控制方法在Canvas类中定义,各个方法调用根据ITU-T提供的按键码作为传入参数,示例6-1为手机界面提供动作,主要函数应用如下:
    l  public int getKeyName(int KeyCode)
    取得单击按键的数字信息,也就是当玩家单击手机任何一个按键时,可由这个函数取得对应的按键数字。
    l  public protected void keyReleased
    (int keyCode)
    当释放按键时调用。调用getGameAction()方法能够判断游戏的动作,而且可以判断任意按键动作。KeyCode为ITU-T的按键码。
    l  public protected void keyPressed
      (int keyCode)
    当单击按键时调用。KeyCode为ITU-T的按键码。
    l  public protected void keyRepeated
      (int keyCode)

    当持续单击按键时调用。KeyCode为传入的ITU-T按键码,在按键过程中持续保持该参数值。本函数的应用要看手机是否提供此功能,并非所有手机都支持这项功能,所以提供另一个判断函数hasRepeatEvents来取得信息。
    l  public protected void
    hasRepeatEvents()
    判断是否支持持续按键动作。
    示例6-1
    /×
      ITU-T按键码程序测试
    ×/
    import javax.microedition.midlet.×;
    import javax.microedition.lcdui.×;
    public class keyAction1 extends MIDlet implements CommandListener
    {
       Display display;
       //声明一个List清单
       List  list;
       Command okCommand;
       //声明一个Canvas画板
       canvasScreen canvasscreen;
       public keyAction1()
       {
          canvasscreen=new canvasScreen();
          //创建一个显示组件
          display=Display.getDisplay(this);
          //创建一个List清单,为IMPLICIT类型
          list=new List("List按键控制", List.IMPLICIT);
          //创建一个确认命令
          okCommand = new Command("确认", Command.OK, 2);
          //作为item选项加入List清单
          list.append("ITU-T按键控制", null);
          list.append("离开", null);
          //将List清单加入到命令
          list.addCommand(okCommand);
          //运行将命令加入到List清单
          list.setCommandListener(this);
       }
       public void startApp()
       {
          //显示清单List界面
          display.setCurrent(list);
       }
       public void pauseApp(){}
       public void destroyApp(boolean unconditional){}
       public void commandAction(Command cmd, Displayable disp)
       {
          if (cmd == okCommand)
          {
             //判断清单软键盘运行的选项
             switch(list.getSelectedIndex())
             {
                //选择第一项

  case 0:
                     //运行画板显示
                     display.setCurrent(canvasscreen);
                     break;
                //选择离开程序
                case 1:
                     destroyApp(false);
                     notifyDestroyed();
                     break;
             }
          }
       }
     
       //运行画板程序应用
       class canvasScreen extends Canvas
       {
          String  checkKey="";
          String  checkkeyName="";
          Image  handImage;
          Image  keyImage;
          String[ ] maxString={"UP", "SOFT1", "LEFT", "SELECT", "RIGHT", "SOFT2", "DOWN",
    "SEND", "CLEAR", "1", "2", "3", "4", "5", "6", "7", "8", "9",
                           "ASTERISK","0","POUND"
                          };
        int[ ]  maxisX={ 85, 40, 60, 85, 110, 130, 85, 30, 85, 35, 85, 135, 35, 85, 135, 35, 85, 135, 35, 85, 135
                       };
        int[ ]  maxisY={ 48, 55, 55, 55, 55, 55, 65, 70, 85, 95, 105, 95, 115, 125,115, 135, 145, 135, 155, 165, 155
                       };
          public canvasScreen()
          {
             try{
                 handImage=Image.createImage("/hand.png");
                 keyImage=Image.createImage("/key.png");
             }catch(Exception ex){}
          }
      
          //调用释放手机按键程序
          public void keyReleased(int keyCode)
          {
             checkKey="release";
             //判断释放按键所代表的ITU-T按键码
             checkkeyName=getKeyName(keyCode);
             //重新绘制Canvas的画板板面
             repaint();
          }
        
          //调用单击手机按键程序
          public void keyPressed(int keyCode)
          {
             checkKey="pound";
             //判断单击按键所代表的ITU-T按键码
             checkkeyName=getKeyName(keyCode);

          //重新绘制Canvas的画板界面
             repaint();
          }
          public void paint(Graphics g)
          {
          g.setColor(0xffffff);
          g.fillRect(0,0,getWidth(),getHeight());
          g.setColor(0);
          g.drawString("Canvas类按键应用", 40, 5, Graphics.LEFT | Graphics. TOP);
          g.drawString("按键状态:", 10, 20, Graphics.LEFT | Graphics.TOP);
             //判断按键码并显示到画板上
             if(checkKey.equals("release"))
          g.drawString("释放的按键码为:"+checkkeyName, 60, 20, Graphics. LEFT |
    Graphics.TOP);
          if(checkKey.equals("pound"))
          g.drawString("单击的按键码为:"+checkkeyName, 60, 20, Graphics. LEFT |
    Graphics.TOP);
          g.drawImage(keyImage, 15, 40,Graphics.LEFT | Graphics.TOP);
           
             for(int i=0; i<maxString.length;i++)
                if(maxString[i].equals(checkkeyName))
          g.drawImage(handImage, maxisX[i], maxisY[i], Graphics.LEFT | Graphics.TOP);
          }
       }
    }

    运行结果如图6-3所示。


图6-3

    【说明】

    从按键程序示例6-1中可以看到,当设计者单击手机键盘的按键时就会显示在画面中。同时也可以了解当前按键动作的状态。也可以明白如何设计游戏中的按键控制。

TAG: J2ME游戏


最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
热门焦点
精彩推荐