解决J2ME开发中的连续按键问题

http://tech.ddvip.com   2006年07月17日    社区交流

本文详细介绍解决J2ME开发中的连续按键问题

  当按键被释放的时候,我们就把相关的标记位设置为false。

  public void keyReleased(int keyCode)
   {
     int action = getGameAction(keyCode);
switch (action)
     {
     case LEFT:
       leftPressed = false;
       buttonPressed = "";
       break;
case RIGHT:
       rightPressed = false;
       buttonPressed = "";
       break;
     default:
       break;
     }
     repaint();
}

  这样我们在重新绘制屏幕的时候就可以根据标记位的状态进行绘画了:

        if (leftPressed)
       {
         left();
       }
       if (rightPressed)
       {
         right();
       }

  笔者给出一个简单的实例来进行论证,我们制作一个MIDlet,当用户按下LEFT的时候,J2ME字符串向左侧移动,当用户按下RIGHT的时候,J2ME字符串向右侧移动。简单起见,我没有处理DOWN和UP的情况。下面是应用程序截图和源代码。

  package com.j2medev;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class KeyActionMIDlet extends MIDlet
{
private Display display;
private MainCanvas mainCanvas;
protected void startApp() throws MIDletStateChangeException
   {
display = Display.getDisplay(this);
     mainCanvas = new MainCanvas();
     new Thread(mainCanvas).start();
     display.setCurrent(mainCanvas);
}
protected void pauseApp()
   {
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
   {
}
}
package com.j2medev;
import javax.microedition.lcdui.*;
public class MainCanvas extends Canvas implements Runnable
{
   private String buttonPressed;
private boolean leftPressed;
private boolean rightPressed;
private int px = getWidth() / 2;
public final int py = getHeight() / 2;
public MainCanvas()
   {
     buttonPressed = " ";
   }
private void left()
   {
     if (px >= 0)
     {
       px--;
     }
     buttonPressed = "LEFT";
     repaint();
   }
private void right()
   {
     if (px <= getWidth())
     {
       px++;
     }
     buttonPressed = "RIGHT";
     repaint();
   }
public void run()
   {
     while (true)
     {
       if (leftPressed)
       {
         left();
       }
       if (rightPressed)
       {
         right();
       }
try
       {
         Thread.sleep(50);
       } catch (InterruptedException e)
       {
         e.printStackTrace();
       }
     }
}
public void paint(Graphics g)
   {
     g.setColor(0xFFFFFF);
     g.fillRect(0, 0, getWidth(), getHeight());
     g.setColor(0x000000);
g.drawString(buttonPressed, 20, 20, Graphics.LEFT | Graphics.TOP);
     g.drawString("J2ME", px, py, Graphics.HCENTER | Graphics.TOP);
}
public void keyReleased(int keyCode)
   {
     int action = getGameAction(keyCode);
switch (action)
     {
     case LEFT:
       leftPressed = false;
       buttonPressed = "";
       break;
case RIGHT:
       rightPressed = false;
       buttonPressed = "";
       break;
     default:
       break;
     }
     repaint();
}
public void keyPressed(int keyCode)
   {
     int action = getGameAction(keyCode);
switch (action)
     {
case LEFT:
       left();
       leftPressed = true;
       break;
case RIGHT:
       right();
       rightPressed = true;
       break;
default:
       break;
}
     repaint();
}
public void keyRepeated(int keyCode)
   {
     int action = getGameAction(keyCode);
     switch (action)
     {
     case LEFT:
       left();
       break;
     case RIGHT:
       right();
       break;
default:
       break;
     }
     repaint();
}
}

责编:豆豆技术应用

正在加载评论...