gpt4 book ai didi

Java游戏: How to overcome a hardware-limitation of a keyboard

转载 作者:行者123 更新时间:2023-11-30 08:27:15 25 4
gpt4 key购买 nike

我正在开发一款 Java 2D 游戏,它最多需要同时按下六个键。该游戏适用于同一键盘上的两个玩家同时玩。

但是,我运行该程序的所有三台计算机都只允许一次最多持有三个键。他们都难以对按住三个以上的键使用react。似乎在已经按住三个键后按下一个新键,要么取消其他键的按住,要么被忽略。

有人告诉我这是硬件问题。大多数键盘一次不能处理三个以上的键。但是很多游戏确实需要这样做,而且它们不需要特殊的游戏键盘就可以在我的电脑上正常运行。

因此必须有一个解决方案,使游戏可以在任何标准键盘上玩。

如果有,请您向我解释一下如何在我的程序中编写代码?(我使用键绑定(bind))。

游戏的控制:

玩家 1

  • 旋转 Sprite 并设置移动角度:向左箭头
  • 旋转 Sprite 并设置移动角度:向右箭头
  • 向前移动:向上箭头
  • 发射导弹:ENTER 键

玩家 2

  • 旋转 Sprite 并设置移动角度:'A'键
  • 旋转 Sprite 并设置移动角度:'D'键
  • 向前移动:'W'键
  • 发射导弹:“T”键

相关代码:

按键绑定(bind)部分:

// An action for every key-press.
// Each action sets a flag indicating the key is pressed.

leftAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
keysPressed1[0] = true;
}
};

rightAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
keysPressed1[1] = true;
}
};

// And so on...
// ....

// An action for every key-release.
// Each action sets a flag indicating the key was released.
// This is only necessary for some of the keys.

leftReleased = new AbstractAction(){
public void actionPerformed(ActionEvent e){
keysPressed1[0] = false;
}
};

rightReleased = new AbstractAction(){
public void actionPerformed(ActionEvent e){
keysPressed1[1] = false;
}
};

// And so on...
// ....

// Binding the keys to the actions.

inputMap.put(KeyStroke.getKeyStroke("UP"),"upAction");
inputMap.put(KeyStroke.getKeyStroke("LEFT"),"leftAction");
// etc...

actionMap.put("upAction",upAction);
actionMap.put("leftAction",leftAction);
// etc...

Board 类中。它包含大部分游戏代码。这部分检查标志并对按键和释放使用react。

            keysPressed1 = tank1.getKeys(); // get flags-array of tank1.
keysPressed2 = tank2.getKeys(); // get flags-array of tank2.

if(keysPressed1[0]==true) // if LEFT is pressed.
tank1.setAngle(tank1.getAngle()-3);

if(keysPressed1[1]==true) // if RIGHT is pressed.
tank1.setAngle(tank1.getAngle()+3);

if(keysPressed1[2]==true){ // if UP is pressed.
tank1.setDX(2 * Math.cos(Math.toRadians(tank1.getAngle())));
tank1.setDY(2 * Math.sin(Math.toRadians(tank1.getAngle())));
}

if(keysPressed1[2]==false){ // if UP is released.
tank1.setDX(0);
tank1.setDY(0);
}

// And the same for the second player's keys...

这主要是在我的程序中对按键和按键释放使用react的方式。当按下或释放一个键时,将设置一个标志。 Board 类在每个游戏循环周期读取标志并做出相应的 react 。

正如我所说,程序无法对同时按住 3 个以上的键做出正确 react ,这可能是键盘的原因。有没有办法编写解决方案?

帮助将不胜感激。非常感谢

最佳答案

你确定你没有遇到重影吗?如果出现重影,则为硬件限制。

这是一个测试器 -> http://www.microsoft.com/appliedsciences/content/projects/KeyboardGhostingDemo.aspx

这是重影的描述 -> http://www.microsoft.com/appliedsciences/antighostingexplained.mspx

关于Java游戏: How to overcome a hardware-limitation of a keyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20970733/

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