Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何检测用户何时真正在Java中释放了密钥?_Java_Key_Keylistener - Fatal编程技术网

我如何检测用户何时真正在Java中释放了密钥?

我如何检测用户何时真正在Java中释放了密钥?,java,key,keylistener,Java,Key,Keylistener,如果你按一个键,玩家向前移动,但如果你按住键的时间稍长,玩家在同一方向移动的时间太长。 我使用此代码检查播放器正在按的键: private void KeyPressed(java.awt.event.KeyEvent evt) { key = evt.getKeyCode(); if (key == KeyEvent.VK_W) { direction = 1; PlayerMovement();

如果你按一个键,玩家向前移动,但如果你按住键的时间稍长,玩家在同一方向移动的时间太长。 我使用此代码检查播放器正在按的键:

private void KeyPressed(java.awt.event.KeyEvent evt) {

    key = evt.getKeyCode();

        if (key == KeyEvent.VK_W) {

            direction = 1;

            PlayerMovement();
        }
        if (key == KeyEvent.VK_S) {

            direction = 2;

            PlayerMovement();
        }
        if (key == KeyEvent.VK_D) {

            direction = 3;

            PlayerMovement();
        }
        if (key == KeyEvent.VK_A) {
            direction = 4;
            PlayerMovement();

        }
}

使用密钥释放!!!如果需要移动播放器,请按evry键一步 按键在用户按键时保持运行

使用线程,因为您正在使用程序,但是如果启动线程,您可以执行任何您想要的操作,程序仍然可以正常工作 了解线程,因为游戏都是关于线程的

private class Walk_thread extends java.lang.Thread{

public void run(){
//call the walk methode here
PlayerMovement();
}
}
因此,当按下该键时,创建一个称为playermovement的线程

if (key == KeyEvent.VK_W) {

        direction = 1;
new Walk_thread().start();//here the method run is called 
System.out.println("program will not stop the thread is walking and the program is continued too");
    }

当用户释放密钥时,您将得到一个
keyreased
事件。依赖于按键事件的频率只会自找麻烦。你的操作基于按键事件,我认为这太普遍了。您可以尝试单独按键或键入键(当输入字符时)。KeyBindinsAPI也是一个很好的地方。KeyListener经常有焦点问题。我得到一个keyReleased事件,但在整个过程之后。太晚了。例如,在我按住一个键后,循环开始,这意味着当我按住一个键2秒时,事件进入一个循环,在6个动画之后,我的播放器停止,因为keyReleased事件触发器,但是如果我按住一个键2秒,我的播放器会在4次动画后停止,这是很长的时间使用布尔变量true当按下时线程会移动播放器并睡眠一段时间当用户松开键时挂起线程非常有用了解它你能给我一个例子吗请告诉我这是一个简单的例子,但它不适用于你仅仅理解线程和例子在哪里?