gpt4 book ai didi

OS X 上的 Java 输入,无按键重复,但有 glut 是

转载 作者:行者123 更新时间:2023-12-01 14:39:12 26 4
gpt4 key购买 nike

我在 OS X 上使用 OpenGL 和 C++ 已经有几个月了。我现在尝试在 OpenGL 中使用 Java(使用 JOGL),但我无法解决这个问题。

对于 glut,如果我按下一个键并保持按下状态,那么 glut 将继续接收事件,并且我在输出中看到的是一系列被按下的字母。然而,使用 JOGL,我无法得到这种行为。相反,我只收到一个字母被按下。

我知道在 OS X 上,这实际上是系统的一个功能,可以防止按键重复,但是 glut 是如何绕过这个功能的呢?有没有办法通过 JOGL 实现这种旁路?

我尝试使用以下代码来重复该键,但是当我按下某个键时,该键的一个打印结果会出现在我的终端上,而不是像 glut 那样出现一系列打印。

这是我迄今为止尝试过的

class keyTest implements KeyEventDispatcher {

@Override
public boolean dispatchKeyEvent(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("dada "+arg0.getKeyChar());
return false;
}
}

KeyboardFocusManager man = KeyboardFocusManager.getCurrentKeyboardFocusManager();
man.addKeyEventDispatcher(new keyTest());

我也尝试过

glcanvas.addKeyListener(new KeyListener() {

@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}

@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("keypressed: "+arg0.getKeyChar());
}
});

具有相同的不良行为:仅打印一个键,而不是一系列键。

编辑:我在 OS X 的终端中看到了一些终端命令来禁用自动重复 block ,但这会破坏 java 提供的可移植性优势。

编辑2:我尝试使用lwjgl,并且我能够通过该库获得重复的关键行为。但逻辑不同。使用 lwjgl,我测试了 if (Keyboard.isKeyDown(Keyboard.getEventKey())) ,然后为每个按键字符执行了 switch case,这与我习惯使用 java 的事件监听和 react 相反。我仍然想知道如何使用 JOGL 做到这一点。

最佳答案

AWT 输入取决于您的 JVM 供应商 AWT 实现。使用 AWT 输入的按键重复的任何问题都必须向您的 JRE/JDK 供应商提交。

JogAmp JOGL 开发人员建议您使用 NEWT 输入和窗口工具包来处理 JOGL 应用程序的按键输入,NEWT 还旨在让您的应用程序扩展到没有 AWT 的系统。由于 NEWT 直接处理输入,因此您的应用程序输入系统可以跨系统相同地工作。 http://jogamp.org/jogl/doc/NEWT-Overview.html

您可以从使用 GLCanvas (AWT) 切换到直接使用 GLWindow (NEWT) 或 NewtCanvasAWT(AWT 应用程序内的 NEWT GLWindow),然后实现 NEWTKeyAdapter 来接收自动重复按键事件。

使用 JogAmp JOGL TestNewtKeyEventAutoRepeatAWT 单元测试验证了使用 NEWT 实现的自动重复可以在 OSX 上工作。

如果您在使用 NEWT 时仍然遇到任何问题,请随时向 JogAmp 团队提交错误报告: http://jogamp.org/wiki/index.php/Jogl_FAQ#Bugreports_.26_Testing

关于OS X 上的 Java 输入,无按键重复,但有 glut 是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com