【发布时间】:2017-02-12 06:01:37
【问题描述】:
我正在开发一个使用全屏独占的小游戏,我需要能够接收玩家的键盘输入。
在我的程序中,我有一个设置为全屏独占的窗口和一个渲染循环。
窗口创建:
private void initialize() {
//This is used for my game loop...
running = true;
//Create the instance variable 'window' here.
window = new Window(null);
//Ignoring OS paint requests...
window.setIgnoreRepaint(true);
//Set the window to full screen exclusive.
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window);
...
游戏循环:
private void loop() {
Graphics graphics = window.getGraphics();
graphics.setColor(Color.CYAN);
graphics.fillRect(0, 0, 1920, 1080);
graphics.dispose();
}
我的进口:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.Window;
现在,这工作正常。正如它应该的那样。它在我的屏幕上呈现一个青色矩形,但是,我需要能够检测用户何时按下键,例如点击Escape 关闭程序等等。我不知道该怎么做。 :(
我尝试将KeyListener 添加到我的window(没有用)。
我尝试将JPanel 添加到我的window 并添加一个监听器(也没有工作)。
我曾尝试请求关注我的JPanel 并在上面做同样的事情。
我尝试使用 KeyListener 制作JFrame,然后将其传递给我的window 的构造函数。
我尝试将带有键绑定的相同JFrame 传递给我的window,而不是KeyListener。
显然,以上都没有奏效。 (没有抛出错误,当我按下一个键或使用System.exit(int); 退出程序时,我根本无法让程序在我的sysouts 中输出文本)我已经取出了所有不起作用的东西我来自上面的代码;我目前有一个窗口和一个游戏循环。 如果有其他方法可以让我获得全屏独占的Key Input,请告诉我。(感觉好像有专门的全屏独占的常规方法,但我没有找到一个还没有。)或者如果你相信有一种方法可以得到我尝试过的方法之一,(也许你认为我做错了什么),请告诉我。 (此时我有点绝望了)。
【问题讨论】:
-
我先看看How to Use Key Bindings,然后我鼓励你看看Painting in AWT and Swing和Performing Custom Painting,因为
Graphics graphics = window.getGraphics();不是自定义绘画应该做的.我知道有人会建议它,但KeyListener通常是一个糟糕的选择,因为它没有键绑定 API 的灵活性 - 恕我直言 -
如果你想要更高级的东西,我还建议你看看
BufferStrategy和 BufferStrategy and BufferCapabilities (ps -Window不是双缓冲的,所以你很可能遭受更新期间闪烁) -
如果你想知道为什么我不推荐
KeyListener- this is another reason why -
@MadProgrammer 感谢您的帮助!我确实浏览了您推荐给我的 Key Binding 页面,但它似乎对我不起作用,但我会继续尝试它。无论如何,我从this 页面找到了
Graphics graphics = window.getGraphics();。我现在会看看你给我看的其他页面。 -
你对信息的解释不正确(我没有这样做一千次),他们不使用
getGraphics,他们使用返回Graphics实例的方法,是前面的双缓冲和翻页部分的前奏
标签: java window awt fullscreen