Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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_Swing_Keyboard_Keylistener_Java 2d - Fatal编程技术网

Java 一个程序如何同时允许多个键盘输入?

Java 一个程序如何同时允许多个键盘输入?,java,swing,keyboard,keylistener,java-2d,Java,Swing,Keyboard,Keylistener,Java 2d,我写了一个简单的游戏,基本上有两个人控制精灵和战斗。我用一个键侦听器编写了这个程序,但这只允许我在任何给定的时间控制一个精灵。我愿意在键盘监听器旁边使用不同的键盘输入方法,尽管我更喜欢使用键盘监听器。我听说过键绑定,但我真的不知道如何使用它们。我有一个想法是多线程,但我对这个概念不太熟悉。这是我的代码:(请留下一个我的代码应该是什么的例子。另外,第二个精灵是由一个单独的类控制的,这个类与这个类几乎相同,但只是使用不同的键。) 目前它并没有控制一个对象,它只是绘制一个缓冲图像,然后用按键输入改变坐

我写了一个简单的游戏,基本上有两个人控制精灵和战斗。我用一个键侦听器编写了这个程序,但这只允许我在任何给定的时间控制一个精灵。我愿意在
键盘监听器
旁边使用不同的键盘输入方法,尽管我更喜欢使用
键盘监听器
。我听说过
键绑定
,但我真的不知道如何使用它们。我有一个想法是多线程,但我对这个概念不太熟悉。这是我的代码:(请留下一个我的代码应该是什么的例子。另外,第二个精灵是由一个单独的类控制的,这个类与这个类几乎相同,但只是使用不同的键。)

目前它并没有控制一个对象,它只是绘制一个缓冲图像,然后用按键输入改变坐标

因此,在生成KeyEvent时执行一个操作

键绑定的工作方式没有什么不同。将动作映射到击键。它不会改变您编写代码的方式,只会改变您处理事件的方式

退房。前两个示例(一个使用KeyListener,另一个使用键绑定)演示了这个概念。这两个类都定义了一个相同的
move(…)
方法,唯一的区别是如何调用该方法

我可以改变格式,但这需要大量的代码修改,我宁愿避免它

现在是学习如何更好地构建/设计程序的最佳时机。Swing是围绕创建动作的概念设计的,这样动作就可以通过键盘或鼠标调用


说到这里,您确实想看看
KeyboardAnimation.java
示例。这门课正是你想要的。它使用计时器进行动画,并允许不同的按键移动不同的对象。

请参阅,您需要按键“轮询”。看看这个。@LuxxMiner ya键绑定的问题是我的代码的格式。目前它并没有控制一个对象,它只是绘制一个缓冲图像,然后用按键输入改变坐标。(我有一个计时器在运行,它每10毫秒就重新绘制一次)我想我可以改变格式,但这需要大量的代码修改,我宁愿避免。好的,谢谢。我会调查的。目前我无法访问计算机,而且我正在使用手机。好吧,我猜你的答案是我用不到的,因为没有其他人回复!谢谢
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.awt.*;
import javax.swing.*;

public class KeyHandler implements KeyListener {

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_UP) {
            Display.up = Display.up + 7;
        }

        if (key == KeyEvent.VK_DOWN) {
            Display.down = Display.down + 7;
        }

        if (key == KeyEvent.VK_RIGHT) {
            Display.right = Display.right + 7;
        }

        if (key == KeyEvent.VK_LEFT) {
            Display.left = Display.left + 7;
        }

        if (key == KeyEvent.VK_SPACE) {
            Display.fireMissile();
            Display.whichSpriteInt = 0;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
}