Java多键按下
我试着把球移过一个框架。我有向上、向下、向左和向右的动作。但当我试着沿对角线移动时,它似乎不起作用。这是我的密码 首先我声明一些集合;按下是按下的键,其他键是向上和向左移动球的组合键,依此类推Java多键按下,java,animation,user-interface,set,frame,Java,Animation,User Interface,Set,Frame,我试着把球移过一个框架。我有向上、向下、向左和向右的动作。但当我试着沿对角线移动时,它似乎不起作用。这是我的密码 首先我声明一些集合;按下是按下的键,其他键是向上和向左移动球的组合键,依此类推 public Set<Integer> pressed = new HashSet<>(); public Set<Integer> upLeft, upRight, downLeft, downRight; 下面是我处理按键和释放按键的方法: public sync
public Set<Integer> pressed = new HashSet<>();
public Set<Integer> upLeft, upRight, downLeft, downRight;
下面是我处理按键和释放按键的方法:
public synchronized void formKeyPressed(java.awt.event.KeyEvent evt) {
pressed.add(evt.getKeyCode());
System.out.println("Added:"+evt.getKeyCode());
if(pressed.size() == 1) {
System.out.println("Size is 1");
if(evt.getKeyCode() == evt.VK_UP) {
if(y <= 25) {
y = 25;
}
else {
y = y - yUpSpeed;
}
}
if(evt.getKeyCode() == evt.VK_DOWN) {
if(y >= (500-25)) {
y = (500-25);
}
else {
y = y + yDownSpeed;
}
}
if(evt.getKeyCode() == evt.VK_LEFT) {
if(x <= 0) {
x = 0;
}
else {
x = x - xLeftSpeed;
}
}
if(evt.getKeyCode() == evt.VK_RIGHT) {
if(x >= (500-25)) {
x = (500-25);
}
else {
x = x + xRightSpeed;
}
}
}
else if(pressed.size() == 2) {
System.out.println("Size is 2");
if(pressed.containsAll(upLeft)) {
if(y <= 25) {
y = 25;
}
else {
y = y - yUpSpeed;
}
if(x <= 0) {
x = 0;
}
else {
x = x - xLeftSpeed;
}
}
if(pressed.containsAll(upRight)) {
if(y <= 25) {
y = 25;
}
else {
y = y - yUpSpeed;
}
if(x >= (500-25)) {
x = (500-25);
}
else {
x = x + xRightSpeed;
}
}
if(pressed.containsAll(downLeft)) {
if(y >= (500-25)) {
y = (500-25);
}
else {
y = y + yDownSpeed;
}
if(x <= 0) {
x = 0;
}
else {
x = x - xLeftSpeed;
}
}
if(pressed.containsAll(downRight)) {
if(y >= (500-25)) {
y = (500-25);
}
else {
y = y + yDownSpeed;
}
if(x >= (500-25)) {
x = (500-25);
}
else {
x = x + xRightSpeed;
}
}
}
else {
System.out.println("Size is more than 2");
}
public synchronized void formKeyReleased(java.awt.event.KeyEvent evt) {
System.out.println("Removed:"+evt.getKeyCode());
pressed.remove(evt.getKeyCode());
}
public synchronized void formKeyPressed(java.awt.event.KeyEvent evt){
按下.add(evt.getKeyCode());
System.out.println(“添加:+evt.getKeyCode());
如果(按下.size()==1){
System.out.println(“大小为1”);
if(evt.getKeyCode()==evt.VK\u UP){
如果(y=(500-25)){
y=(500-25);
}
否则{
y=y+y下降速度;
}
}
if(evt.getKeyCode()==evt.VK_左){
如果(x=(500-25)){
x=(500-25);
}
否则{
x=x+x右速度;
}
}
}
else if(按.size()==2){
System.out.println(“大小为2”);
如果(按下。容器所有(英尺)){
如果(y=(500-25)){
x=(500-25);
}
否则{
x=x+x右速度;
}
}
}
否则{
System.out.println(“大小大于2”);
}
public synchronized void formkeyereleased(java.awt.event.KeyEvent evt){
System.out.println(“删除:+evt.getKeyCode());
按下.remove(evt.getKeyCode());
}
问题是,从debug system.out消息中,按下的集合的大小从未超过1。我做错了什么?查看中的
键盘动画示例。它保留当前按下的键的贴图,然后基于贴图中的所有键移动对象
这种方法使用键绑定
,由于博客中给出的原因,这比KeyListener更受欢迎。我很困惑,所以基本上,当按下一个键时,检查它是什么键并将其添加到列表中,释放时,将其从列表中删除,然后使用完成的更新循环检查列表中的内容并更新b的状态all@MadProgrammer基本上是的。当按键被按下时,将其添加到列表中,然后根据是否按下一个或多个按键,更新球的位置。然后当按键被释放时,将其从列表中删除。很好,因此从按键事件处理程序方法中删除移动逻辑。您应该得到两个按键事件;每个按键一个。您的逻辑是否rk,如果他们一个接一个地来?@SteveHarrington问题是,我只得到一个
public synchronized void formKeyPressed(java.awt.event.KeyEvent evt) {
pressed.add(evt.getKeyCode());
System.out.println("Added:"+evt.getKeyCode());
if(pressed.size() == 1) {
System.out.println("Size is 1");
if(evt.getKeyCode() == evt.VK_UP) {
if(y <= 25) {
y = 25;
}
else {
y = y - yUpSpeed;
}
}
if(evt.getKeyCode() == evt.VK_DOWN) {
if(y >= (500-25)) {
y = (500-25);
}
else {
y = y + yDownSpeed;
}
}
if(evt.getKeyCode() == evt.VK_LEFT) {
if(x <= 0) {
x = 0;
}
else {
x = x - xLeftSpeed;
}
}
if(evt.getKeyCode() == evt.VK_RIGHT) {
if(x >= (500-25)) {
x = (500-25);
}
else {
x = x + xRightSpeed;
}
}
}
else if(pressed.size() == 2) {
System.out.println("Size is 2");
if(pressed.containsAll(upLeft)) {
if(y <= 25) {
y = 25;
}
else {
y = y - yUpSpeed;
}
if(x <= 0) {
x = 0;
}
else {
x = x - xLeftSpeed;
}
}
if(pressed.containsAll(upRight)) {
if(y <= 25) {
y = 25;
}
else {
y = y - yUpSpeed;
}
if(x >= (500-25)) {
x = (500-25);
}
else {
x = x + xRightSpeed;
}
}
if(pressed.containsAll(downLeft)) {
if(y >= (500-25)) {
y = (500-25);
}
else {
y = y + yDownSpeed;
}
if(x <= 0) {
x = 0;
}
else {
x = x - xLeftSpeed;
}
}
if(pressed.containsAll(downRight)) {
if(y >= (500-25)) {
y = (500-25);
}
else {
y = y + yDownSpeed;
}
if(x >= (500-25)) {
x = (500-25);
}
else {
x = x + xRightSpeed;
}
}
}
else {
System.out.println("Size is more than 2");
}
public synchronized void formKeyReleased(java.awt.event.KeyEvent evt) {
System.out.println("Removed:"+evt.getKeyCode());
pressed.remove(evt.getKeyCode());
}