【问题标题】:Java KeepPushing Key game ListenerJava KeepPushing Key 游戏监听器
【发布时间】:2014-11-29 12:08:06
【问题描述】:

我做了一个游戏,船在移动,就像我想移动他一样。但我的问题是当我按下按钮时。我的船正在移动,但他必须等待 1 秒才能开始以正确的方式移动。

public void keyPressed(KeyEvent e) {
    int jakiPrzycisk = e.getExtendedKeyCode();
    if(jakiPrzycisk == 39 )
    {
        kierunek="prawo";
        czyRuch = true;
    }
    if(jakiPrzycisk == 37)
    {
        kierunek="lewo";
        czyRuch = true;

    }
    if(jakiPrzycisk == 38)
    {
        kierunek="gora";
        czyRuch = true;

    }
    if(jakiPrzycisk == 40)
    {
        kierunek="dol";
        czyRuch = true;

    }

在游戏中,我会检查他是否会使用“czyRuch”移动,而我会使用“kierunek”朝正确的方向移动。有一种方法可以最快地从键盘读取吗?

【问题讨论】:

    标签: java awt keylistener


    【解决方案1】:

    不要使用“幻数”。 37, 38, 39 40 对任何阅读您的代码的人来说都没有任何意义。

    但我的问题是当我按下按钮时。我的船正在移动,但他必须等待 1 秒才能开始以正确的方式移动。

    那么你有一个没有发布的代码的问题。 Java 将立即响应 KeyEvent。

    但是,如果按住键,重复事件会有一个“延迟”。此延迟取决于操作系统。如果您需要处理重复事件的能力,那么您应该使用自己的Timer 来安排这些事件。查看Motion Using the Keyboard 了解有关此主题的更多想法以及工作代码。

    【讨论】:

      【解决方案2】:

      是的,对不起,那是我的错误。现在我可以向你展示一个我遇到问题的例子。

      有示例代码

      public class KeyTest extends JFrame implements KeyListener {
      
      
      long start;
      long end;
      public KeyTest() {
          super("KeyListener Test");
          setPreferredSize(new Dimension(300, 100));
          addKeyListener(this);
          start = System.nanoTime();;
      
          pack();
          setVisible(true);
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      @Override
      public void keyPressed(KeyEvent evt) {
          end = System.nanoTime();;
      
          char c = evt.getKeyChar();
          System.out.print(c+" ");
          System.out.println(end-start);
      }
      
      @Override
      public void keyReleased(KeyEvent evt) {
      
      }
      
      @Override
      public void keyTyped(KeyEvent evt) {
      
      }
      

      }

      当我按下任何键时,例如“s”。我有一个

      s 810407913
      s 1312851842
      s 1344314575
      s 1377971356
      s 1409969550
      s 1441512603
      s 1475051136
      s 1507228263
      

      第一个和第二个“s”之间有很大的不同。这就是为什么当我想按任意键几秒钟但我不知道如何改变时间差时,我的船会停一会儿

      【讨论】:

        猜你喜欢
        • 2014-02-03
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2016-01-13
        • 2012-11-06
        • 1970-01-01
        • 2016-08-16
        • 1970-01-01
        相关资源
        最近更新 更多