[英]Switch screens (libgdx) - Game class implementing ApplicationListener
我們正在使用libgdx進行游戲,我們希望能夠切換屏幕。 我制作了一個GameOverScreen,它實現了Screen:
public class GameOverScreen implements Screen {
}
我的問題是我不知道如何在主班級設置屏幕。 我看過的大多數示例都顯示了擴展Game(com.badlogic.gdx.Game)的主類。 但是我們的主類實現了ApplicationListener,並且沒有擴展Game:
public class Game implements ApplicationListener {
}
因此,我不能使用Game類中的setScreen方法。 那么,如何在主班游戲中更改屏幕?
com.badlogic.gdx.Game除了執行ApplicationListener以外,什么也不做。 有一些簡單的選項:
因此,您可以擴展com.badlogic.gdx.Game而不是實現ApplicationListener
與com.badlogic.gdx.Game相同。 例如:
public void setScreen (Screen screen) { if (this.screen != null) this.screen.hide(); this.screen = screen; if (this.screen != null) { this.screen.show(); this.screen.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); } }
使用組合/適配器:在ApplicationListener實現類中創建com.badlogic.gdx.Game的字段,並委派您實現的方法。
首先, Game
是預定義的類,因此對於您自己的實現,請使用其他類名代替Game
。
com.badlogic.gdx.Game
是ApplicationListener
,它僅具有Screen
的引用,因此具有setScreen()
方法。
用Game
擴展Main(origin)
類,而不是編寫自己的實現,因為您需要在游戲中進行Screen
過渡。
SE的一些規則:
永遠不要兩次寫相同的代碼。
如果您已經錘擊過,請不要用手折斷磚塊。
主要你需要3節課
播放屏幕和主菜單屏幕將從抽象屏幕擴展。 Screenmanager根據screenenum中的屏幕代碼切換屏幕
****屏幕枚舉類別****
public enum ScreenEnum {
MAIN_MENU {
public AbstractScreen getScreen(Object... params) {
return new MainMenuScreen();
}
},
PLAY {
public AbstractScreen getScreen(Object... params) {
return new PlayScreen();
}
};
public abstract AbstractScreen getScreen(Object... params);
}
ScreenManager類別
public class ScreenManager {
private static ScreenManager instance;
private Game game;
private ScreenManager() {
super();
}
public static ScreenManager getInstance() {
if (instance == null) {
instance = new ScreenManager();
}
return instance;
}
public void initialize(Game game) {
this.game = game;
}
public void showScreen(ScreenEnum screenEnum, Object... params) {
Screen currentScreen = game.getScreen();
AbstractScreen newScreen = screenEnum.getScreen(params);
newScreen.buildStage();
game.setScreen(newScreen);
// Dispose previous screen
if (currentScreen != null) {
currentScreen.dispose();
}
}
}
AbstarctScreen類(可選類)
public abstract class AbstractScreen implements Screen {
protected AbstractScreen() {
super( );
}
public abstract void buildStage();
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
@Override
public void show() {
}
@Override
public void resize(int width, int height){
}
@Override public void hide() {}
@Override public void pause() {}
@Override public void resume() {}
}
屏幕開關
ScreenManager.getInstance().showScreen(ScreenEnum.PLAY, 0);
ScreenManager.getInstance().showScreen(ScreenEnum.MAIN_MENU, 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.