【问题标题】:Distinguishing left and right shift keys in Processing 3区分处理 3 中的左移和右移键
【发布时间】:2016-12-11 21:37:19
【问题描述】:

好吧,我会提前说,我知道这不是一个新概念……但无论我研究什么似乎都没有任何效果。基本上,我希望能够感应键盘上的每个键,包括不同的 shift/ctrl/alt/enter 键。除了这些之外,每个键都会返回一个唯一的 keyCode,这很好,但我似乎无法区分这些重复项。

无需任何修改,void keyPressed () 就可以正常工作。我被告知要区分重复的键,我可以import java.awt.event.KeyEvent; 然后使用

void keyPressed (KeyEvent e) {
  if (keyCode == SHIFT) {
    int location = e.getKeyLocation ();
    if (location == KEY_LOCATION_RIGHT) {
      RShift = true;
    }
    if (location == KEY_LOCATION_LEFT) {
      LShift = true;
    }
  }
}

但是,这样做会出现一些问题:

  • 如果我导入库,keyPressed () 将永远不会被调用。
  • 如果我导入库但取出 keyPressed () 中的 KeyEvent 参数,只要我注释掉对不存在的 KeyEvent e 的任何引用,它就可以工作。
  • 如果我不导入它并留下参数,它只会抱怨 getKeyLocation () 不存在,但就是这样。

我需要反向覆盖之类的吗?非常感谢您的帮助!

附:另一个相关问题,如何区分鼠标左键、中键和右键?我可以得到这些和滚轮,但任何其他按钮只返回 0 的 mouseButton 代码。建议?谢谢!

【问题讨论】:

    标签: java input processing keyevent


    【解决方案1】:

    https://processing.org/reference/keyPressed_.html

    keyPressed() 函数在每次按下一个键时调用一次。按下的键存储在 key 变量中。

    如果你想覆盖keyPressed你必须使用相同的签名所以没有参数,在方法中你可以引用PApplet的key变量

    我相信这样

    void keyPressed()
    **int 位置 = 键

    编辑:int location = keyEvent

    【讨论】:

    • "如果你想覆盖keyPressed你必须使用相同的签名所以没有参数,在方法中你可以引用PApplet的key变量"你能解释一下吗?如果我只使用 key 变量甚至 keyCode 它只会为两个 shift 键返回相同的值。
    • 好的,必须回到 PApplet 的代码 keyEvent 变量才能解决问题,
    • 抱歉,如何使用 PApplet?我从来没有听说过它,从我所看到的情况来看,它只是在另一个 IDE(如 Eclipse)中创建处理项目时需要包含的东西。如果我使用的是默认处理 IDE,这与此有什么关系?
    • 从你所说的我猜你正在研究一个扩展 PApplet 的类
    • 这就是我的猜测...那么,现在...?对奇怪行为的任何解释/修复?
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多