2014-10-18 59 views
0

与您使用Java的Canvas类所做的类似,我正在尝试编写一种方法来设置LWJGL Display的最大大小。我碰到的唯一问题是LWJGL的Display类没有setWidth或setHeight方法,我想不出我能写自己的方法。我的第一个想法是以某种方式获得窗口使用的JFrame的实例,但没有任何方法可以让我感觉像是SOL。我也尝试过使用DisplayMode,并重新设置大小,但是它关闭了窗口并在每次调整大小时重新打开它。我试图编写一个方法,只需调整窗口的大小,就好像用户正在拖动它来放大它一样。有人知道我可以/应该这样做吗?考虑到在您手动拖动/调整大小之后,放大显示甚至不会更新,是否可以获得我期待的这种平滑最大尺寸效果?LWJGL Display.setWidth/Height?

回答

2

如果您需要对窗口进行更多控制,则可以尝试使用AWT Frame作为LWJGL Canvas的父级。这将允许您的代码利用默认的窗口方法,包括在Java标准库中找到的setWidth()setHeight(),防止和控制窗口行为,并添加侦听器以运行某些事件的代码。

首先,import java.awt.*然后设置代码看起来是这样的:

创建FrameCanvas

Frame frame = new Frame("LWJGL Game Window"); 
frame.setLayout(new BorderLayout()); 
Canvas canvas = new Canvas(); 

添加CanvasFrame

frame.add(canvas, BorderLayout.CENTER); 

设置LWJGL并将其应用于Canvas

try { 
    Display.setParent(canvas); 

    frame.setPreferredSize(new Dimension(1024, 786)); 
    frame.setMinimumSize(new Dimension(800, 600)); 
    frame.pack(); 
    frame.setVisible(true); 

    Display.create(); 

    while(!Display.isCloseRequested() && !closeRequested) 
    { 
     // main code or call to code goes here 

     GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); 
     Display.update(); 
    } 

    Display.destroy(); 
    frame.dispose(); 
    System.exit(0); 

} catch (LWJGLException e) { 
    e.printStackTrace(); 
} 

不知道有多少你知道Java的,但在这里,你可以添加一个ActionListernerComponentListerner如果窗口大小,做一些东西。

另请参阅LWJGL wiki AWT Frames。这至少应该有助于指引您朝着正确的方向发展。