gpt4 book ai didi

java - 按键事件 : Making multiple inputs work together

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:30 24 4
gpt4 key购买 nike

检查这段代码:

public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_W)
{
new panel().player1.playerMoves("North", 10, 600,500);
}
else if (e.getKeyCode() == KeyEvent.VK_S)
{
new panel().player1.playerMoves("South", 10, 600,500);
}

if (e.getKeyCode() == KeyEvent.VK_UP)
{
new panel().player2.playerMoves("North", 10, 600,500);
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
new panel().player2.playerMoves("South", 10, 600,500);
}
}

我对此没有任何问题,我的问题不需要知道我正在调用的类。正在发生的事情是有两名球员。 Player1 的控件绑定(bind)到 wasd 键,player2 的控件绑定(bind)到箭头键。然而,这些 if 语句似乎有点相互覆盖。我的意思是,如果 player1 向上移动而 player2 开始向下移动,则 player1 将不得不停止。我正在考虑使用多线程来解决这个问题,但我不确定它是否有效,或者是否有更简单的问题解决方案。我可以做些什么来使多个击键协同工作吗?

最佳答案

您可以将按下的键存储在某个列表中,称之为pressedKeys。按下某个键时,将该键添加到 pressedKeys。当一个键被释放时(覆盖 keyReleased() 方法),您从 pressedKeys 中删除该键。然后,您可以根据按下的键中的内容移动播放器。例如,

    public void movePlayer() {
if ( pressedKeys.contains( UP ) ) {
movePlayerUp();
}
if ( pressedKeys.contains( DOWN ) ) {
movePlayerDown();
}
if ( pressedKeys.contains( S ) ) {
movePlayerDown();
}

...

}

想要的类(class):

class MyListener implements KeyListener {

private ArrayList< Integer > keysPressed = new ArrayList< Integer >();

public MyListener() {

}

@Override
public void keyPressed( KeyEvent e ) {
if ( !keysPressed.contains( e.getKeyCode() ) ) {
keysPressed.add( e.getKeyCode() );
}

movePlayer();
}

@Override
public void keyReleased( KeyEvent e ) {
keysPressed.remove( e.getKeyCode() );
}

public void movePlayer() {
//move player based on what keys are pressed.
}
}

关于java - 按键事件 : Making multiple inputs work together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com