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

使用setOnKeyPressed和setOnKeyReleased移动

别永年
2023-03-14
player.setTranslateX(player.getTranslateX() + player.velocityX);
player.setTranslateY(player.getTranslateY() + player.velocityY);
myScene.setOnKeyPressed(e -> {
   Thread t1;

   t1 = new Thread(new Runnable() {
      @Override
      public void run() {
         switch(e.getCode()) {
            case A:
            player.velocityX = -1;
            break;

            case D:
            player.velocityX = 1;
            break;

            case W:
            player.velocityY = -1;
            break;

            case S:
            player.velocityY = 1;
            break;
         }
      }
   }); 
   t1.start();
})
myScene.setOnKeyReleased(e -> {
   Thread t2;

   t2 = new Thread(new Runnable() {
      @Override
      public void run() {
         switch(e.getCode()) {
            case A:
            player.velocityX = 0;
            break;

            case D:
            player.velocityX = 0;
            break;

            case W:
            player.velocityY = 0;
            break;

            case S:
            player.velocityY = 0;
            break;
         }
      }
   });
   t2.start();
})

这是工作良好,但有一个错误,当我按多个键,并释放其中一个,物体停止移动,直到我松开我的手指键,并按下该键再次。现在我知道这与歧义概念有关,但我碰上了一堵墙,我愿意接受一些想法。

共有1个答案

易英奕
2023-03-14

我以前在写游戏的时候遇到过这个问题,就像你写游戏的时候一样。

经过一系列调试后,看起来问题实际上与您编写的代码有关,而与库本身有关。似乎如果你按住多个键,收到的按键的缓冲区就会被“卡住”,直到你松手再按一次,它才会有反应。

在Mac上解决此问题的一个方法是在TERMINAL中运行以下命令:

defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false
 类似资料:
  • 问题内容: 这里是我想要的描述:在tkinter画布中绘制几何对象(在此为矩形)的集合,然后蜜蜂通过鼠标探索该画布。单击并拖动以移动画布,滚动放大和缩小。 使用本主题,我找到了单击和拖动部分:使用Mousewith-mouse 移动tkinter画布 我设法写了一些滚动缩放。移动和缩放都可以很好地分开工作。 问题 :如果移动然后放大,则变焦的焦点不再是光标所在的位置。 有什么建议吗? 这是一段要测

  • 我喜欢从旧版1.2迁移。log4j的x版本,根据文档,我可以使用网桥(log4j-1.2-api-2.15.0.jar),但其中一个要求是: “它们不能通过调用类DOMConfigurator或PropertyConfigurator进行配置” 不幸的是,我们正在使用DOMConfigurator来设置日志配置。 如果我删除这个-是桥寻找一个log4j。xml,它能读取旧的配置格式吗?或者我必须将

  • 我的项目即将启动。在发布之后,我有一个很大的计划,数据库结构将发生变化——现有表和新表中的新列,以及与现有模型和新模型的新关联。 我还没有接触到序列化中的迁移,因为我只有测试数据,我不介意每次数据库更改时都删除这些数据。 为此,目前,如果我更改了模型定义,我会在我的应用程序启动时运行。这将删除所有表并从头开始创建它们。我可以省略选项,让它只创建新表。但如果现有的改变了,这是没有用的。 那么,一旦我

  • 移动插件商品的集成和使用 项目集成 项目中使用 移动插件商品的集成和使用 更新时间:2018-03-26 17:39:45 项目集成 首先从“已购买”页出发,选择对应的移动插件商品,点击操作栏的“项目集成”,即可打开以下项目集成界面。 注意查看该插件是否依赖了其他收费服务,并按照提示,购买依赖服务,方可确保插件正常使用。 在项目集成页,用户可以选择将购买的移动插件总用量,按照不同的配额分配到自己名

  • 我目前正在开始使用jQuery mobile构建一个移动应用程序,并将其包装为Phonegap以支持本机应用程序,这是对我们已经存在的用Django编写的桌面应用程序的扩展,我的问题是,将用html5/js/css编写的客户端应用程序连接到服务器端的最佳方式是什么,我会使用JSON发送/接收数据吗,有人写过关于这方面的好文章吗?

  • 我正在使用flyway 3.0进行数据库迁移。到目前为止,我只在SQL脚本中使用它。数据库:mySql。 这些脚本存储在数据库迁移下的 src/主/资源中。 现在我想添加一个基于Java的迁移文件,以便使用Java逻辑。我想使用Spring。 我应该在哪里存储类?我希望它们在我的项目包中位于src /主/java下:例如com。20.db迁移 有人能帮我弄一下maven和Spring的配置吗? 你