Java屏幕分辨率更改
我正在关注Youtube上Newboston提供的一系列Java游戏开发教程。我现在可以制作一个全屏窗口,但分辨率拒绝调整到800x600。我已经测试了vc,一个GraphicsEnvironment.getDefaultScreenDevice对象,和dm,一个DisplayMode,它们似乎没有问题。我在跑雪豹。有什么想法吗Java屏幕分辨率更改,java,osx-snow-leopard,fullscreen,Java,Osx Snow Leopard,Fullscreen,我正在关注Youtube上Newboston提供的一系列Java游戏开发教程。我现在可以制作一个全屏窗口,但分辨率拒绝调整到800x600。我已经测试了vc,一个GraphicsEnvironment.getDefaultScreenDevice对象,和dm,一个DisplayMode,它们似乎没有问题。我在跑雪豹。有什么想法吗 if(dm != null && vc.isDisplayChangeSupported()){ try{ vc
if(dm != null && vc.isDisplayChangeSupported()){
try{
vc.setDisplayMode(dm);
System.out.println("Display mode set");
}catch(Exception ex){System.out.println("Despite the vc saying it is display change supported and the DM is not null, something went wrong");}
}
}
将此代码添加到Core.java(或GameClient.java)类中。问题可能是您没有将所需的DM[]参数传递给ScreenManager.java类
private static final DisplayMode modes[] = { //common monitor DMs
new DisplayMode(1366,768,32, DisplayMode.REFRESH_RATE_UNKNOWN), //1366x768px w/32-bit depth
new DisplayMode(1366,768,24, DisplayMode.REFRESH_RATE_UNKNOWN), // ' w/24-bit depth
new DisplayMode(1366,768,16, DisplayMode.REFRESH_RATE_UNKNOWN), // ' w/16-bit depth
new DisplayMode(800,600,32, DisplayMode.REFRESH_RATE_UNKNOWN), //800x600px w/32-bit depth
new DisplayMode(800,600,24, DisplayMode.REFRESH_RATE_UNKNOWN), // ' w/24-bit depth
new DisplayMode(800,600,16, DisplayMode.REFRESH_RATE_UNKNOWN), // ' w/16-bit depth
new DisplayMode(640,480,32, DisplayMode.REFRESH_RATE_UNKNOWN), //640x480px w/32-bit depth
new DisplayMode(640,480,24, DisplayMode.REFRESH_RATE_UNKNOWN), // ' w/24-bit depth
new DisplayMode(640,480,16, DisplayMode.REFRESH_RATE_UNKNOWN), // ' w/16-bit depth
};
我假设错误与您的public void setFullScreen(DisplayMode dm)方法有关。在这种情况下,此方法的完整语法为:
/*****************************************************************************
* @description: Creates window for program to run in, using appropriate DM
* @param DisplayMode dm
*/
public void setFullScreen(DisplayMode dm){
JFrame f = new JFrame();
f.setUndecorated(true); //no titlebars/scroll bars etc.
f.setIgnoreRepaint(true);
f.setResizable(false); //user cannot resize window
vc.setFullScreenWindow(f);
if(dm!=null && vc.isDisplayChangeSupported()){ //if DM is changeable
try {
vc.setDisplayMode(dm);
} catch (Exception e){/*Catch 'em all*/}
}
f.createBufferStrategy(2); //set # of screen buffers to 2
}//setFullScreen()
注意到这是一个轻微的necro帖子。啊…执行此代码时是否会出现异常?如果是这样,请尝试使用
ex.getMessage()
或ex.printStackTrace()
打印错误消息。类似的代码适用于Leopard。编辑您的问题以包含一个显示您所描述的问题的列表可能会有所帮助。请检查是否已修复。必须将位深度更改为32。很抱歉浪费您的时间。@WalterCogges没什么大不了的,只要确保始终从捕获块中的异常获取消息即可。空的catch块可能会导致数小时的调试。@WalterCogges您能回答自己的问题并将其标记为已解决吗?