当前位置: 首页 > 知识库问答 >
问题:

一个简单的java游戏InputHandler问题

益绯辞
2023-03-14
private Player player;

public PlayerInputHandler(Player player){
    super();
    this.player = player;
}

@Override
public void keyPressed(KeyEvent pressedKey) {
    int keyCode = pressedKey.getKeyCode();

    if(keyCode == KeyEvent.VK_RIGHT){
        this.player.setCurrentWidthPos(this.player.getCurrentWidthPos() + 5);
        this.player.setIsPlayerMovingRight(true);
    }
    if(keyCode == KeyEvent.VK_LEFT){
        this.player.setCurrentWidthPos(this.player.getCurrentWidthPos() - 5);
        this.player.setIsPlayerMovingLeft(true);
    }
    if(keyCode == KeyEvent.VK_SPACE){
        if(this.player.getIsPlayerMovingLeft() == false && this.player.getIsPlayerMovingRight() == false){
            this.player.shoot();
        }
    }
}

@Override
public void keyTyped(KeyEvent typedKey) {

}

@Override
public void keyReleased(KeyEvent releasedKey) {
    int keyCode = releasedKey.getKeyCode();

    if(keyCode == KeyEvent.VK_RIGHT){
        this.player.setIsPlayerMovingRight(false);
    }
    if(keyCode == KeyEvent.VK_LEFT){

            this.player.setIsPlayerMovingLeft(false);

    }
}

}

共有1个答案

孟乐
2023-03-14

我不是一个挥杆专家,但这就是正在发生的事情。当你按单个按钮时,比如说右箭头键,你会不断地得到新的按下键的事件。当仍然保持右箭头,然后按空格键并释放它时,您将获得空格键的按下键和释放键事件,而您不再从右箭头按钮获得任何按下键的事件。为什么会这样?正如我所说的,我不知道swing是如何工作的。

不管怎样,这是给你的解决办法。我问你在你没有提供的代码中是否有游戏循环,你有。你必须将玩家的位置更新移动到游戏循环的更新方法。

更改KeyListener:

public void keyPressed(KeyEvent pressedKey) {
    int keyCode = pressedKey.getKeyCode();

    if(keyCode == KeyEvent.VK_RIGHT){
        this.player.setIsPlayerMovingRight(true);
    }
    if(keyCode == KeyEvent.VK_LEFT){
        this.player.setIsPlayerMovingLeft(true);
    }
    if(keyCode == KeyEvent.VK_SPACE){
        if(this.player.getIsPlayerMovingLeft() == false && this.player.getIsPlayerMovingRight() == false){
            this.player.shoot();
        }
    }
}
this.player.setCurrentWidthPos()
if(player.getIsPlayerMovingRight()) {
    player.setCurrentWidthPos(this.player.getCurrentWidthPos() + 5);
}

if(player.getIsPlayerMovingLeft()) {
    this.player.setCurrentWidthPos(this.player.getCurrentWidthPos() - 5);
}
 类似资料:
  • 我正在创建一个骰子游戏,其中2个玩家有他们自己的骰子,每个人都有自己的轮到扔他的骰子,玩家可以完全失去分数或获得分数取决于他们站在窗口的位置,游戏结束时,任何一个玩家首先站在终点车道上,获胜者是得分最高的玩家,我已经在游戏的设计到目前为止,但还没有在逻辑上工作。 这个链接是游戏应该是什么样子的图片: 我想知道我如何才能添加球员1和球员2在每个瓷砖上面的照片,所以基本上每次当一个球员玩他的回合,我希

  • 我已经尝试自己学习Java大约一个星期了,我决定尝试应用我(相当有限)的知识来制作一个简单的猜谜游戏。

  • 特别感谢JoãoCésar,这段as3代码创建了一个函数来生成SWF加载器。他使用增量值(count)在存储每个加载器动态信息的数组中循环迭代。在这种情况下,计数%SWFS.Length将导致0,1,0,1....在循环序列中有效地加载SWF。 这是一个想法: 代码如下:

  • 本文向大家介绍Java实现简单台球游戏,包括了Java实现简单台球游戏的使用技巧和注意事项,需要的朋友参考一下 Java实现简单台球桌问题,供大家参考,具体内容如下 需求: 使小球可以在桌面上移动,移动到桌面边缘将被弹回,显示小区的移动 素材: 小球照片 桌球照片 程序源代码: 运行效果 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍JQuery做的一个简单的点灯游戏分享,包括了JQuery做的一个简单的点灯游戏分享的使用技巧和注意事项,需要的朋友参考一下 最近屌丝被迫学习TypeScript(不学就会被开除,5555),所以得先学JavaScript,这下可好,所有网页相关的东西都得要有所了解,否则没法忽悠BOSS。 今天学了一小会JavaScript,这里先做了一个简单的点灯游戏,算是练手吧。其中用到了JQu

  • 我正在尝试用libgdx开发一个简单的蛇游戏。我的问题是,每次我想要繁殖一些苹果(纹理,20px宽X 20px高),它总是与蛇的身体重叠。我试图避免这种情况,但它在比赛中不断发生。 snake由多个部分组成-每个部分都是一个20px宽X 20px高的纹理(屏幕宽度是480px宽X 800px高) 以下是我迄今为止所做的尝试: 代码很容易解释。每时每刻,屏幕上都有3个不同的苹果。这段代码试图抽奖x-