当前位置: 首页 > 面试题库 >

如何使多个按键绑定同时工作?

薄烨
2023-03-14
问题内容

我需要设计一个有两个玩家的游戏。每个人都有一个球,应该能够左右移动球,第一个球员带有’a’‘d’按钮,第二个球员带有右,左箭头按钮。但是,当前一名球员需要等待另一名球员的动作完成才能移动自己的球。我该如何解决这个问题?这是我的代码的相关部分:

    public class AnimationWindow extends JPanel{

      public AnimationWindow()
        {

            super();
            ....
            ....
            cezmiMover();

        }



public void cezmiMover(){

        this.getInputMap().put(KeyStroke.getKeyStroke('a'), "left1");
        this.getActionMap().put("left1", new AbstractAction() {

            public void actionPerformed(ActionEvent e) {

                board.cezmi1.moveLeft();
            }
        });

        this.getInputMap().put(KeyStroke.getKeyStroke('d'), "right1");
        this.getActionMap().put("right1", new AbstractAction() {

            public void actionPerformed(ActionEvent e) {

                board.cezmi1.moveRight();
            }
        });

        this.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "left2");
        this.getActionMap().put("left2", new AbstractAction() {

            public void actionPerformed(ActionEvent e) {

                board.cezmi2.moveLeft();
            }
        });

        this.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "right2");
        this.getActionMap().put("right2", new AbstractAction() {

            public void actionPerformed(ActionEvent e) {

                board.cezmi2.moveRight();
            }
        }); 
    }
}

问题答案:

您需要使用一系列标志和某种“更新”循环来根据标志的状态来更新游戏的状态…

例如,首先创建一系列标志…

private boolean p1Left, p1Right, p2Left, p2Right = false;

这些可以由单个播放器对象轻松维护,但是您没有提供那么多代码…

接下来,您需要监视按键和按键释放事件,并根据需要设置标志的状态…

this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, false), "right1down");
this.getActionMap().put("right1down", new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        p1Right = true;
    }
});

this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0, true), "right1up");
this.getActionMap().put("right1up", new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
        p1Right = false;
    }
});

然后,您需要某种可以更新游戏状态的循环或计时器。就个人而言,我喜欢使用javax.swing.Timer,但仅此而已。

在更新循环的每次运行中,您需要检查每个标志的状态并相应地更新对象。

if (p1Right) {
    board.cezmi1.moveRight();
}


 类似资料:
  • 问题内容: 我有以下方法可以在Angular中捕获按键: 我听着 但是,我想检测何时同时按下两个键,例如和同时按下(不是一个一个又一个又一个的组合)。 最好的方法是什么? 编辑 我当时想的是: 因此,如果我有多个按键,那么我将创建正确的。但是,问题在于,现在顺序很重要(即,如果我按then ,则按is ;如果我按另一种方式按,则得到) 问题答案: 我认为广播使用过多。而是使用自定义指令?这是一个用

  • 问题内容: 我正在尝试用Java创建一个简单的Pong游戏,但我不知道如何让两个玩家同时使用键盘。游戏尚不完整,我目前正在为两位玩家进行划桨动作。问题是,当一个玩家按下自己的向上键并向上移动其拨片时,但是如果其他玩家按下其任意键,则会取消先前的玩家动作并导致拨片停止。我想我需要一种同时处理多个键输入的方法。这是我的代码,底部的KeyListeners是我需要帮助的地方。我只有1年的Java程序员,

  • 问题内容: 我正在尝试开发JavaScript游戏引擎,但遇到了这个问题: 当我按下时,角色跳跃。 当我按下时,角色向右移动。 问题是当我向右按然后按空格键时,角色会跳跃然后停止移动。 我使用该功能来按下键。如何检查是否同时按下多个键? 问题答案: **注意:现已弃用 如果您了解概念,则可以轻松进行多次击键检测 我这样做的方式是这样的: 这段代码非常简单:由于计算机一次只传递一个按键,因此创建了一

  • 按键绑定 你可以激活keyBindings选项来支持键盘控制。默认情况下iScroll监听方向键,上下翻页建,home/end键,但这些按键绑定完全可以自定义。 你可以通过传递一个包含按键代码列表的对象来进行按键绑定。 默认的按键值如下: keyBindings: { pageUp: 33, pageDown: 34, end: 35, home: 36,

  • 正如标题所说,我想检测多个键盘键同时(同时)按下和正在(同时)按下一段时间。我试图在上添加多个事件处理程序,但不起作用: 但是,当用户同时按[]和[]并保持按下时,上面的两个操作必须同时发生,而不仅仅是其中一个。

  • 问题内容: 编程新手,尤其是python和tKinter。如何创建将键“s”绑定到按钮或功能的方法?任何帮助都是极好的。 问题答案: 您需要进行两项更改: 加 到。(绑定到Frame似乎无效。) 当按下时,会被调用。由于Tkinter将发送对象,因此我们还必须将呼叫签名更改为 因此,当按下按钮时,将被设置为默认值,但是当按下按键时, 将被分配给对象。