【问题标题】:Java screen resolution changeJava 屏幕分辨率更改
【发布时间】:2012-03-04 13:28:53
【问题描述】:

我正在关注 YouTube 上 thenewboston 的一系列关于 Java 游戏开发的教程。我可以制作全屏窗口,但分辨率拒绝调整为 800x600。我已经测试了 vc,一个 GraphicsEnvironment.getDefaultScreenDevice 对象和 dm,一个 DisplayMode,它们似乎不是问题所在。我正在运行雪豹。有什么想法吗?

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");}

    }
}

【问题讨论】:

  • 这段代码执行时是否出现异常?如果是这样,请尝试使用ex.getMessage()ex.printStackTrace() 打印出错误消息
  • 类似的代码适用于 Leopard。编辑您的问题以包含显示您描述的问题的sscce 可能会有所帮助。
  • 检查一下,它是固定的。不得不将位深度更改为 32。抱歉浪费您的时间。
  • @WalterCoggeshall 没什么大不了的,只要确保始终从 catch 块中的异常中获取消息。空的 catch 块可能会导致数小时的调试。
  • @WalterCoggeshall 你能回答你自己的问题并将其标记为已解决吗?

标签: java osx-snow-leopard fullscreen


【解决方案1】:

将此代码添加到您的 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-post。啊……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多