Java lwjgl& slick2d游戏gui和hud?

时间:2014-03-23 12:05:26

标签: java user-interface interface 2d lwjgl

我是Java的新手,目前正在开发一款小游戏,只是为了测试我能用Java做些什么。但是遇到了一个随机的问题:我不知道如何制作一个GUI(单人游戏,多人游戏,选项等菜单)和一个HUD(图形显示值[Life,Mana,Experience ...])如何标题已经说过:我正在使用库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);
        }

    }    
}

1 个答案:

答案 0 :(得分:0)

您应该尝试检查TWL。我想这是在LWJGL环境中实现GUI的方法之一,虽然这种方法非常困难(可能是由xml部分引起的)并且它没有很好地记录(在我看来)

您还可以尝试将LWJGL的主要Display类放在标准的Swing Canvas中,使用该函数设置其父级。

我自己需要一个GUI,我正在学习TWL