我正在尝试使用isKeyPressed方法,但它只是无法正常工作,我必须按某个特定的位置来敲键吗?

时间:2019-01-29 21:02:45

标签: java eclipse stddraw

我想做一个游戏,就是一圈越过障碍,但我跳不起来

我已经尝试过键盘上的所有键

import java.awt.event.KeyEvent;

public class Game {

    public static void main(String[] args) {
        StdDraw.setCanvasSize();
        circle player = new circle(0, 0.05 , 0.05) ;
        StdDraw.line(0, 0, 1, 0);       

        if(StdDraw.isKeyPressed(KeyEvent.VK_UP)){
            System.out.println("hello");
            double height = player.height;
            while(height <= 0.2)
            height = height + 0.05;

            StdDraw.setCanvasSize();
            StdDraw.line(0, 0, 1, 0);       
            StdDraw.filledCircle(0, height, 0.05);
            StdDraw.show(100);
        }
    }
}

我放入了打印功能,以测试它是否在“ if”中 而且不是

2 个答案:

答案 0 :(得分:0)

您没有以正确的方式监听KeyEvent。旧的方法是使用KeyListener,而较新的方法是使用Key绑定,但是对我来说,当我编写Java代码时,发现我在编写用于游戏的键盘控件方面,答案是使用KeyEventDispatcher子类,就像我做的{{3 }}

答案 1 :(得分:0)

  

我正在尝试使用isKeyPressed方法,但该方法不起作用,我必须按特定的位置来敲键吗?

很有可能您必须在程序的GUI窗口处于焦点状态时按该键,但不一定是在鼠标指针位于任何特定位置时。但是最大的问题是 timing 。当控件到达if语句时,程序将测试当前是否按下了某个键。在第一次显示任何内容之后,这应该非常迅速地发生,这可能对您来说太快了,因此您的程序在执行任何操作之前会飞过它。此外,由于它(很可能)仅在程序窗口处于焦点状态时才响应按下的键,因此您甚至不应期望能够抢先按下某个键并使程序识别它。

我不确定这种事情的StdDraw习惯用法是什么,即使有的话。我想您想创建一个循环,反复检查输入并更新显示。通常,这种事情自然会在GUI的事件调度线程上运行,但是StdDraw似乎旨在将您与之隔离。