我对Java非常陌生,目前正在制作一个小游戏,只是为了测试我能用Java做什么。但遇到了一个随机问题:我不知道如何制作GUI(带有单人,多人,选项的菜单)和HUD(数值的图形显示[生命,魔法,经验…])标题已经说明:我正在使用库jinput, lwjgl, lwjgl_util和Slick2D。我的窗口是通过lwjgl的Display类呈现的。下面是Main.class的代码:
public class Main
{
public static int disWidth = 800;
public static int disHeight =600;
public static void main(String[] args)
{
initDisplay();
initGL();
initGame();
gameLoop();
// initGui();
cleanUp();
}
private static void initGame()
{
Game.game = new Game();
}
private static void getInput()
{
Game.game.getInput();
}
private static void initGui()
{
//Render the gui
}
private static void update()
{
Game.game.update();
// GUI.gui.update() or something
}
private static void render()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
Game.game.render();
Display.update();
Display.sync(60);
}
private static void initGL()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, Display.getWidth(), 0, Display.getHeight(), -1, 1);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_DEPTH_TEST);
glClearColor(0, 0, 0, 0);
}
private static void gameLoop()
{
Time.init();
int frames = 0;
long lastTime = System.nanoTime();
long totalTime = 0;
while(!Display.isCloseRequested())
{
long now = System.nanoTime();
long passed = now - lastTime;
lastTime = now;
totalTime += passed;
if(totalTime >= 1000000000)
{
System.out.println(frames);
totalTime = 0;
frames = 0;
}
Time.update();
getInput();
update();
render();
frames++;
}
}
private static void cleanUp()
{
Display.destroy();
Keyboard.destroy();
}
private static void initDisplay()
{
try
{
Display.setDisplayMode(new DisplayMode(disWidth, disHeight));
Display.create();
Keyboard.create();
}
catch (LWJGLException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
您应该尝试检查TWL。我认为这是在LWJGL环境中实现GUI的一种方法,尽管这种方法相当困难(可能是由于xml部分),并且没有很好地记录(在我看来)
你也可以尝试把LWJGL的主显示类放在一个标准的Swing Canvas中,使用函数来设置它的父类。
我自己需要一个GUI,我正在学习TWL