四、输入处理
-
在LWJGL中,使用Set***Callback进行输入处理。以下是所有的输入处理(第一个参数为窗口,第二个为匿名函数),当用户进行如下操作时调用匿名函数
GLFW.glfwSetWindowCloseCallback(window, null); // 窗口关闭 GLFW.glfwSetWindowContentScaleCallback(window, null); // 窗口比例更改 GLFW.glfwSetWindowFocusCallback(window, null); // 窗口获得焦点 GLFW.glfwSetWindowIconifyCallback(window, null); // 窗口最小化 GLFW.glfwSetWindowMaximizeCallback(window, null); // 窗口最大化 GLFW.glfwSetWindowPosCallback(window, null); // 窗口坐标改变 GLFW.glfwSetWindowRefreshCallback(window, null); // 窗口刷新 GLFW.glfwSetWindowSizeCallback(window, null); // 窗口大小改变 GLFW.glfwSetKeyCallback(window, null); // 按键按下 GLFW.glfwSetCharCallback(window, null); // (受修饰符影响)字符输入 GLFW.glfwSetCharModsCallback(window, null); // (不受修饰符影响)字符输入 GLFW.glfwSetMouseButtonCallback(window, null); // 鼠标按下 GLFW.glfwSetCursorPosCallback(window, null); // 鼠标指针位置改变 GLFW.glfwSetCursorEnterCallback(window, null); // 鼠标指针进入窗口 GLFW.glfwSetScrollCallback(window, null); // 窗口滚动 GLFW.glfwSetDropCallback(window, null); // 文件拖入窗口
-
在engine包下创建io包,并新建Input类和各抽象类
public GLFWWindowCloseCallback closeCallback;
public GLFWWindowContentScaleCallback contentScaleCallback;
public GLFWWindowFocusCallback focusCallback;
public GLFWWindowIconifyCallback iconifyCallback;
public GLFWWindowMaximizeCallback maximizeCallback;
public GLFWWindowPosCallback posCallback;
public GLFWWindowRefreshCallback refreshCallback;
public GLFWWindowSizeCallback sizeCallback;
public GLFWKeyCallback keyCallback;
public GLFWCharCallback charCallback;
public GLFWCharModsCallback charModsCallback;
public GLFWMouseButtonCallback mouseButtonCallback;
public GLFWCursorPosCallback cursorPosCallback;
public GLFWCursorEnterCallback cursorEnterCallback;
public GLFWScrollCallback scrollCallback;
public GLFWDropCallback dropCallback;
- 在构造函数中实现这些类
public Input() {
closeCallback = new GLFWWindowCloseCallback() {
@Override
public void invoke(long window) {
// window 窗口
}
};
contentScaleCallback = new GLFWWindowContentScaleCallback() {
@Override
public void invoke(long window, float xscale, float yscale) {
// window 窗口
// xscale x方向的缩放
// yscale y方向的缩放
}
};
focusCallback = new GLFWWindowFocusCallback() {
@Override
public void invoke(long window, boolean focused) {
// window 窗口
// focused 是否获得焦点
}
};
iconifyCallback = new GLFWWindowIconifyCallback() {
@Override
public void invoke(long window, boolean iconified) {
// window 窗口
// iconified 是否最小化
}
};
maximizeCallback = new GLFWWindowMaximizeCallback() {
@Override
public void invoke(long window, boolean maximized) {
// window 窗口
// maximized 是否最大化
}
};
posCallback = new GLFWWindowPosCallback() {
@Override
public void invoke(long window, int xpos, int ypos) {
// window 窗口
// xpos x坐标
// ypos y坐标
}
};
refreshCallback = new GLFWWindowRefreshCallback() {
@Override
public void invoke(long window) {
// window 窗口
}
};
sizeCallback = new GLFWWindowSizeCallback() {
@Override
public void invoke(long window, int width, int height) {
// window 窗口
// width 新宽度
// height 新高度
}
};
keyCallback = new GLFWKeyCallback() {
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
// window 窗口
// key 按键类型
// scancode 按键的系统专用扫描码
// action 按下的模式(释放、按下、反复)
// mods 修饰符
}
};
charCallback = new GLFWCharCallback() {
@Override
public void