Java 二维文本框的键盘输入
所以在过去的一天半里,我一直被这个问题困扰着。 我试图在我的LWJGL游戏中实现一个2D可写文本框。文本框的呈现不是问题,而且工作完美无瑕 然而,我的输入并没有真正起作用。问题是我不知道如何检测单次按键,所以它没有在输入字符串中添加“a”,而是添加了“aaaaaaaaaaaaaaaaaa”,因为游戏时钟非常快 这是我的代码:Java 二维文本框的键盘输入,java,input,textbox,lwjgl,Java,Input,Textbox,Lwjgl,所以在过去的一天半里,我一直被这个问题困扰着。 我试图在我的LWJGL游戏中实现一个2D可写文本框。文本框的呈现不是问题,而且工作完美无瑕 然而,我的输入并没有真正起作用。问题是我不知道如何检测单次按键,所以它没有在输入字符串中添加“a”,而是添加了“aaaaaaaaaaaaaaaaaa”,因为游戏时钟非常快 这是我的代码: private boolean canType = false; private static long curTime= System.currentTimeMilli
private boolean canType = false;
private static long curTime= System.currentTimeMillis();
private static long keyTypeTime = System.currentTimeMillis();
String input = "";
// Game loop
// I'm using a timer to limit typing, which doesn't work that well.
if (curTime - keyTypeTime >= 100) {
keyTypeTime = System.currentTimeMillis();
canType = true;
}
if (canType) {
char c = Keyboard.checkAllKeys();
canType = false;
if (c != '*') {
if (c == '/') {
System.out.println("backspace");
if (input != null && input.length() > 0) {
input = input.substring(0, input.length() - 1);
}
} else if (c == '{') {
storyLogic();
} else {
input += c;
}
}
}
这是我实际的键盘类和“checkAllKeys”方法:
导入org.lwjgl.glfw.GLFWKeyCallback;
导入静态org.lwjgl.glfw.glfw.*
公共类键盘扩展了GLFWKeyCallback{
public static boolean[] keys = new boolean[65536];
// The GLFWKeyCallback class is an abstract method that
// can't be instantiated by itself and must instead be extended
//
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
// TODO Auto-generated method stub
keys[key] = action != GLFW_RELEASE;
}
// boolean method that returns true if a given key
// is pressed.
public static boolean isKeyDown(int keycode) {
return keys[keycode];
}
public static char checkAllKeys() {
char key = '*';
if(isKeyDown(GLFW_KEY_A)) {
key = 'a';
}
if(isKeyDown(GLFW_KEY_Z)) {
key = 'z';
}
if(isKeyDown(GLFW_KEY_SPACE)) {
key = ' ';
}
if(isKeyDown(GLFW_KEY_BACKSPACE)) {
key = '/';
}
if(isKeyDown(GLFW_KEY_ENTER)) {
key = '{';
}
return key;
}
}
我还在学习LWJGL 3,所以键盘课不是我的,只有checkAllKeys方法是我自己做的
谢谢
string key2=null;
公共静态字符checkAllKeys(){
字符键='*';
如果(isKeyDown(GLFW_KEY_A)){
键2='a';
}
if(isKeyDown(GLFW_KEY_Z)){
键2='z';
}
if(isKeyDown(GLFW_KEY_SPACE)){
键2=“”;
}
if(isKeyDown(GLFW_KEY_BACKSPACE)){
键2='/';
}
如果(isKeyDown(GLFW_KEY_ENTER)){
键2='{';
}
如果(!isKeyDown(GLFW_KEY_A)和&key2=='A'){
键='a';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_Z)&&key2=='Z'){
键='z';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_SPACE)&&key2=''){
键='';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/')){
键='/';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{'){
键='{';
key2=null;
}
}
string key2=null;
公共静态字符checkAllKeys(){
字符键='*';
如果(isKeyDown(GLFW_KEY_A)){
键2='a';
}
if(isKeyDown(GLFW_KEY_Z)){
键2='z';
}
if(isKeyDown(GLFW_KEY_SPACE)){
键2=“”;
}
if(isKeyDown(GLFW_KEY_BACKSPACE)){
键2='/';
}
如果(isKeyDown(GLFW_KEY_ENTER)){
键2='{';
}
如果(!isKeyDown(GLFW_KEY_A)和&key2=='A'){
键='a';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_Z)&&key2=='Z'){
键='z';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_SPACE)&&key2=''){
键='';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/')){
键='/';
key2=null;
}
如果(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{'){
键='{';
key2=null;
}
}
public static boolean[] keys = new boolean[65536];
// The GLFWKeyCallback class is an abstract method that
// can't be instantiated by itself and must instead be extended
//
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
// TODO Auto-generated method stub
keys[key] = action != GLFW_RELEASE;
}
// boolean method that returns true if a given key
// is pressed.
public static boolean isKeyDown(int keycode) {
return keys[keycode];
}
public static char checkAllKeys() {
char key = '*';
if(isKeyDown(GLFW_KEY_A)) {
key = 'a';
}
if(isKeyDown(GLFW_KEY_Z)) {
key = 'z';
}
if(isKeyDown(GLFW_KEY_SPACE)) {
key = ' ';
}
if(isKeyDown(GLFW_KEY_BACKSPACE)) {
key = '/';
}
if(isKeyDown(GLFW_KEY_ENTER)) {
key = '{';
}
return key;
}