2015-09-08 2 views
1

Я новичок в java и libgdx, и я хочу создать экран главного меню. Может ли кто-нибудь дать мне простой пример?Как создать экран главного меню libgdx

+0

Как libgdx чаще всего используется для программирования игр, вы можете получить больше ответов, переместив этот вопрос на «Обмен играми». –

+0

Читайте о [Scene2d] (https://github.com/libgdx/libgdx/wiki/Scene2d) и [Scene2d skins] (http://www.gamefromscratch.com/post/2013/12/18/LibGDX-Tutorial -9-Scene2D-Part-3-UI-Skins.aspx) и вернуться с вопросами - хотя я уверен, что вы сможете создать меню после лекции –

ответ

10

Что вы просите очень широк, оно включает в себя множество элементов, таких как создание кнопок, скинов, настройка таблиц и т. Д. В любом случае вы должны использовать Экраны для этого, добавить сцену и добавить актеров на сцену. В конце концов вам нужно добавить слушателей к вашим участникам кнопок, чтобы переключать экраны. Вот один, который я сделал для вас:

public class TestScreen implements Screen{ 

    private SpriteBatch batch; 
    protected Stage stage; 
    private Viewport viewport; 
    private OrthographicCamera camera; 
    private TextureAtlas atlas; 
    protected Skin skin; 

    public TestScreen() 
    { 
     atlas = new TextureAtlas("skin.atlas"); 
     skin = new Skin(Gdx.files.internal("skin.json"), atlas); 

     batch = new SpriteBatch(); 
     camera = new OrthographicCamera(); 
     viewport = new FitViewport(Constants.WorldWidth, Constants.WorldHeight, camera); 
     viewport.apply(); 

     camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0); 
     camera.update(); 

     stage = new Stage(viewport, batch);  
    } 


    @Override 
    public void show() { 
     //Stage should controll input: 
     Gdx.input.setInputProcessor(stage); 

     //Create Table 
     Table mainTable = new Table(); 
     //Set table to fill stage 
     mainTable.setFillParent(true); 
     //Set alignment of contents in the table. 
     mainTable.top(); 

     //Create buttons 
     TextButton playButton = new TextButton("Play", skin); 
     TextButton optionsButton = new TextButton("Options", skin); 
     TextButton exitButton = new TextButton("Exit", skin); 

     //Add listeners to buttons 
     playButton.addListener(new ClickListener(){ 
      @Override 
      public void clicked(InputEvent event, float x, float y) { 
       ((Game)Gdx.app.getApplicationListener()).setScreen(new PlayScreen()); 
      } 
     }); 
     exitButton.addListener(new ClickListener(){ 
      @Override 
      public void clicked(InputEvent event, float x, float y) { 
       Gdx.app.exit(); 
      } 
     }); 

     //Add buttons to table 
     mainTable.add(playButton); 
     mainTable.row(); 
     mainTable.add(optionsButton); 
     mainTable.row(); 
     mainTable.add(exitButton); 

     //Add table to stage 
     stage.addActor(mainTable); 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(.1f, .12f, .16f, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     stage.act(); 
     stage.draw(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height); 
     camera.position.set(camera.viewportWidth/2, camera.viewportHeight/2, 0); 
     camera.update(); 
    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void dispose() { 
     skin.dispose(); 
     atlas.dispose(); 
    } 
} 

Как я это называю, немного изменив начальный класс.

//Let the class extend from game 
public class MyGame extends Game() 
{ 
    //Delete everything in it and leave a create() with a single line 
    @Override 
    public void create() { 
    setScreen(new MenuScreen()); 
    } 
} 

Конечно, чтобы вышеприведенный код будет работать вам нужно настроить Skin и Atlas для рисования кнопок. Однако вы можете просто добавить изображение и шрифт и создать свои кнопки вручную. Во всяком случае, я просто answered a question, где я углубляюсь в создание Skin и Atlas.

Редактировать Хотя был задан пример класса меню, пользователю просто нужно было узнать, как переключиться с экрана на экран. Немного неудобно, но, к счастью, написав вышеприведенный код, потребовалось всего пару минут;).

Вы всегда можете получить доступ к ApplicationListener откуда угодно, используя Gdx.app.getApplicationListener. Вы можете отдать это Game для доступа к setScreen.

((Game)Gdx.app.getApplicationListener()).setScreen(new GameScreen()); 

Или вы можете пройти по первому игровому объекту или в списке приложений вручную. Убедитесь, что новый экран принимает игровой объект.

public class MenuScreen 
{ 
    private Game gameObject; 
    public MenuScreen(Game gameObject) 
    { 
     this.gameObject = gameObject; 
    } 
    private void someMethod() 
    { 
     //Switches to a new MenuScreen... 
     //useless in most cases but you get the idea 
     gameObject.setScreen(new MenuScreen(gameObject); 
    } 
} 
+0

Спасибо, если вам пришлось написать весь код, но что Я имел в виду, как использовать несколько экранов и экран переключения, из моего понимания, когда вы нажимаете кнопку setScreen (myOtherScreen()); но что нового Playscreen() ?? Вы не можете просто назвать класс другого экрана? –

+0

@StormAsdg Тогда в следующий раз будьте более конкретными;). 'setScreen' принадлежит к объекту Game, так что либо вы должны называть его из сохраненного applicationListener, либо передавать исходный объект« Game »allong. Вы делаете '((Game) Gdx.app.getApplicationListener()). SetScreen (nextScreen);' Или вы можете передать исходный игровой объект allong и сделать 'gameObject.setScreen'. – Madmenyo

+0

Имейте в виду, что мы используем 'setScreen (новый GameScreen()):' каждый раз создаете новый экран, и если вы не загружаете текущее состояние, он будет сброшен до значения по умолчанию. Это не проблема, если вы загружаете состояние на самом экране. Как и значения слайдера для музыки и звука на экране параметров. Но вам нужно использовать AssetManager для ваших активов, иначе все будет замедляться довольно быстро. – Madmenyo

Смежные вопросы