0

lwjglで表示を切り替える方法を知りたいです。swapBuffers(name_of_display) を実行しますか? つまり、メニュー画面があり、表示ウィンドウを閉じずに、ウィンドウ内のパネルだけでオプション画面に切り替えたいということです。

4

1 に答える 1

0

これは、メニューを処理する私のゲーム コンテナの 1 つであり、そこから何か便利なものを取得できるかもしれません。

package catt.main;

import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.glClear;

import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;

import catt.gameMode.Arcade;
import catt.gameMode.Campaign;
import catt.gameMode.Editor;
import catt.gameMode.gameMode;
import catt.gameMode.menu.ArcadeMenu;
import catt.gameMode.menu.CampaignMenu;
import catt.gameMode.menu.ExitMenu;
import catt.gameMode.menu.ExitToMainMenu;
import catt.gameMode.menu.LoadScreen;
import catt.gameMode.menu.MainMenu;
import catt.gameMode.menu.editor.EditorMenu;
import catt.gameMode.menu.editor.LoadMenu;
import catt.gameMode.menu.editor.OverwriteMenu;
import catt.gameMode.menu.editor.SaveMenu;



public class Game {

    enum GameState{
        GAME, MENU;
    }
    enum GameType{

        //Gamemodes
        ARCADE, CAMPAIGN, EDITOR, LOADING,

        //Menus
        M_MAIN, M_ARCADE, M_EDITOR, M_EXIT, M_EXIT_MAIN, M_CAMPAIGN, M_LOAD, M_SAVE, M_OVERWRITE;
    }
    public static gameMode gameMode;
    public static gameMode gameMenu;

    private static GameState GameState;

    private static GameType GameType;
    private static GameType lastGameType;
    private static GameType lastMenu;

    private Boolean isRunning = true;

    private static String saveFile;

    @SuppressWarnings("static-access")
    public Game(){
        GameState = GameState.MENU;
        GameType = GameType.M_MAIN;
        lastMenu = GameType;
    }

    //Gameloop
    public void isRunning(){
        gameLoad();

        while(!Display.isCloseRequested()&&isRunning != false){
            glClear(GL_COLOR_BUFFER_BIT);

            //Subloops
            escape();
            update();


            Display.update(); 
            Display.sync(60);
        }
        setGameType("M_EXIT");
    }

    /**
     * Sets the gameMode or gameMenu to the right active state and loads it.
     */
    @SuppressWarnings("static-access")
    public static void gameLoad(){

        if(GameState == GameState.GAME){
            if(GameType == GameType.ARCADE){
                gameMode = new Arcade();
            }else if(GameType == GameType.CAMPAIGN){
                gameMode = new Campaign();
            }else if(GameType == GameType.EDITOR){
                gameMode = new Editor();
            }else if(GameType == GameType.LOADING){
                gameMode = new LoadScreen();
            }
            gameMode.load();
        }
        else if(GameState == GameState.MENU){
            if(GameType == GameType.M_MAIN){
                gameMenu = new MainMenu();
            }else if(GameType == GameType.M_ARCADE){
                gameMenu = new ArcadeMenu();
            }else if(GameType == GameType.M_CAMPAIGN){
                gameMenu = new CampaignMenu();
            }else if(GameType == GameType.M_EDITOR){
                gameMenu = new EditorMenu();
            }else if(GameType == GameType.M_EXIT){
                gameMenu = new ExitMenu();
            }else if(GameType == GameType.M_SAVE){
                gameMenu = new SaveMenu();
            }else if(GameType == GameType.M_LOAD){
                gameMenu = new LoadMenu();
            }else if(GameType == GameType.M_OVERWRITE){
                gameMenu = new OverwriteMenu(saveFile);
            }else if(GameType == GameType.M_EXIT_MAIN){
                gameMenu = new ExitToMainMenu();
            }
            gameMenu.load();
        }
    }

    /**
     * Checks if the menu should be opened or closed if the escape button is pressed;
     */
    @SuppressWarnings("static-access")
    public void escape(){
        if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)){
            if(Keyboard.next()){
                if(GameState == GameState.MENU&&GameType == GameType.M_MAIN){
                    setGameType("M_EXIT");
                }else if(GameState == GameState.MENU&&GameType != GameType.M_MAIN){
                    if(GameType == GameType.M_SAVE
                            ||GameType == Game.GameType.M_LOAD){
                        setGameType("M_LAST");
                    }else{                      
                        setState("GAME");
                    }
                }else if(GameState == GameState.GAME){

                    if(GameType == GameType.ARCADE){
                        setGameType("M_ARCADE");
                    }else if(GameType == GameType.CAMPAIGN){
                        setGameType("M_CAMPAIGN");
                    }else if(GameType == GameType.EDITOR){
                        setGameType("M_EDITOR");
                    }
                }
            }
        }
    }

    /**
     * Switches the game state to the asigned state (Menu or Game)
     */
    @SuppressWarnings("static-access")
    public void update(){
        if(GameState == GameState.MENU){
            gameMenu.update();
            gameMenu.render();
        }else if(GameState == GameState.GAME){
            gameMode.update();
            gameMode.render();
        }
    }

    @SuppressWarnings("static-access")
    public static void setState(String state){
        if(state == "GAME"){
            GameState = GameState.GAME;
            GameType = lastGameType;
        }
        else if(state == "MENU"){
            GameState = GameState.MENU;
            GameType = lastMenu;
        }
    }


    /**
     * Sets the (enum) GameType and GameState to the next GameType/State.
     * @param type
     */
    @SuppressWarnings("static-access")
    public static void setGameType(String type){
        //Gamemodes
        if (type == "ARCADE") {

            GameState = GameState.GAME;
            GameType = GameType.ARCADE;
            lastGameType = GameType.ARCADE;
        } 

        else if (type ==  "CAMPAIGN") {

            GameState = GameState.GAME;
            GameType = GameType.CAMPAIGN;
            lastGameType = GameType.CAMPAIGN;
        } 

        else if (type ==  "EDITOR") {

            GameState = GameState.GAME;
            GameType = GameType.EDITOR;
            lastGameType = GameType.EDITOR;
        }

        //Menus
        else if (type ==  "M_MAIN") {

            GameState = GameState.MENU;
            GameType = GameType.M_MAIN;
            lastMenu = GameType.M_MAIN;
        }

        else if (type ==  "M_ARCADE") {

            GameState = GameState.MENU;
            GameType = GameType.M_ARCADE;
            lastMenu = GameType.M_ARCADE;
        }

        else if (type ==  "M_CAMPAIGN") {

            GameState = GameState.MENU;
            GameType = GameType.M_CAMPAIGN;
            lastMenu = GameType.M_CAMPAIGN;
        }
        else if (type ==  "M_EDITOR") {

            GameState = GameState.MENU;
            GameType = GameType.M_EDITOR;
            lastMenu = GameType.M_EDITOR;
        }
        else if (type ==  "M_LOAD") {

            GameState = GameState.MENU;
            GameType = GameType.M_LOAD;
        }
        else if (type ==  "M_SAVE") {

            GameState = GameState.MENU;
            GameType = GameType.M_SAVE;
        }
        else if (type == "M_OVERWRITE"){
            GameState = GameState.MENU;
            GameType = GameType.M_OVERWRITE;
        }

        else if(type == "M_EXIT_MAIN"){
            GameState = GameState.MENU;
            GameType = GameType.M_EXIT_MAIN;
        }
        else if (type ==  "M_EXIT") {

            GameState = GameState.MENU;
            GameType = GameType.M_EXIT;
        }
        else if(type == "M_LAST"){
            GameState = GameState.MENU;
            GameType = lastMenu;
        }
        gameLoad();
    }
于 2013-11-26T08:43:05.103 に答える