Java-是否可以让它监听特定的按键顺序?

Java-是否可以让它监听特定的按键顺序?,java,mobile,java-me,midlet,Java,Mobile,Java Me,Midlet,我正在尝试为一个简单的划桨游戏实现一个作弊代码,作弊应该只在按下键的特定顺序时激活:上、上、下、下、左、左、右、右。我正在努力,但我没能得到它 if(up >= 2){ if(down >= 2){ if(left >= 2){ if(right >= 2){ cheat = true; g.setColor(0x

我正在尝试为一个简单的划桨游戏实现一个作弊代码,作弊应该只在按下键的特定顺序时激活:上、上、下、下、左、左、右、右。我正在努力,但我没能得到它

    if(up >= 2){
        if(down >= 2){
            if(left >= 2){
                if(right >= 2){
                    cheat = true;
                    g.setColor(0x00FF0000);
                    g.fillRect(x, y, canvas.getWidth(), 5);
                    g.fillRect(x, y - 5, 5, 5);
                    g.fillRect(canvas.getWidth() - 5, y - 5, 5, 5);
                    x = 0;
                    width = canvas.getWidth();
                    height = canvas.getHeight();
                }else{
                    g.setColor(0x00FF0000);
                    g.fillRect(x, y, width, height);
                    g.fillRect(x, y - height, height, height);
                    g.fillRect(x + width - height, y - height, height, height);
                    System.out.println(up + " " + down + " " + left + " " + right + "right");
                }
            }else{
                g.setColor(0x00FF0000);
                g.fillRect(x, y, width, height);
                g.fillRect(x, y - height, height, height);
                g.fillRect(x + width - height, y - height, height, height);
                right = 0;System.out.println(up + " " + down + " " + left + " " + right + "left");
            }
        }else{
            g.setColor(0x00FF0000);
            g.fillRect(x, y, width, height);
            g.fillRect(x, y - height, height, height);
            g.fillRect(x + width - height, y - height, height, height);
            left = 0; right = 0;System.out.println(up + " " + down + " " + left + " " + right + "down");
        }
    }else{
        g.setColor(0x00FF0000);
        g.fillRect(x, y, width, height);
        g.fillRect(x, y - height, height, height);
        g.fillRect(x + width - height, y - height, height, height);
        down = 0; left = 0; right = 0;System.out.println(up + " " + down + " " + left + " " + right + "up");
    }
程序每50毫秒更新一次。 上、左、下、右是键侦听器,当按下这些键时,它像计数器一样被添加。忽略整个g.fillRect和g.setColor以及System.outwas,我试图看看它是如何工作的,以及如何自己解决问题。当用户没有输入正确的键顺序时,计数器应该重置,但由于更新是每50毫秒一次,计数器就会出错


有没有办法检测按键的特定顺序,或者这是不可能的?

您应该创建一个对象,该对象在每次单击按钮时都会接收按键事件。该对象将按顺序跟踪当前已按下的键列表,并且在每次添加堆栈时也将检查堆栈,以查看列表是否与您提供的模式匹配。如果用户输入的密钥与模式不匹配,不要忘记清除堆栈

你可以这样做

int cheat = 0; //keeps track of how many were pressed in order

if (cheat == 0 && upButtonPressed)
    cheat++;
elseif (cheat == 1 && upButtonPressed)
    cheat++;
elseif(cheat == 2 &&  downButtonPressed)
    cheat++;
//rest of the order
else
    cheat = 0;

if (cheat == 8) //or however many buttons need to be pressed
    //do whatever you want to happen when the cheat is activated

我将用键代码制作两个数组。一个用于游戏动作代码,一个用于相应的按键代码。因为你想在没有d-pad或操纵杆的手机上提供另一种输入组合键的方式

int[] keys1 = {getKeyCode(UP), getKeyCode(UP), getKeyCode(DOWN), getKeyCode(DOWN), getKeyCode(LEFT), getKeyCode(LEFT), getKeyCode(RIGHT), getKeyCode(RIGHT)};
int[] keys2 = {KEY_NUM2, KEY_NUM2, KEY_NUM8, KEY_NUM8, KEY_NUM4, KEY_NUM4, KEY_NUM6, KEY_NUM6};
int keyIterator = 0;

public void keyPressed(int kc) {
 if (kc == keys1[keyIterator] || kc == keys2[keyIterator]) { // Correct key
  keyIterator++;
  if (keyIterator > keys1.length) {
   // keyIterator has reached the length of the array, meaning the secret key combination has been entered successfully.
  }
 } else { // Wrong key. Start over
  keyIterator = 0;
 }
}

每次按下一个键,您都会得到一个键码。现在,为什么不自己检查一下顺序并激活它呢?显然,所有这些都在一个方法中,该方法在每次关键事件发生时都会被调用