我已经实现了我的MenuScreen: -
private static final String TAG = MenuScreen.class.getName();
private Stage stage;
private Skin skinMenuScreen;
//private Skin skinLibgdx;
// menu
private Image imgControlContainer;
private TextButton btnStartGame;
// debug
private final float DEBUG_REBUILD_INTERVAL = 5.0f;
private boolean debugEnabled = false;
private float debugRebuildStage;
public MenuScreen(Game game) {
super(game);
}
@Override
public void render(float deltaTime) {
Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
rebuildStage();
stage.act(deltaTime);
stage.draw();
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height);
}
@Override
public void show() {
stage = new Stage();
Gdx.input.setInputProcessor(stage);
rebuildStage();
}
@Override
public void hide() {
stage.dispose();
skinMenuScreen.dispose();
//skinLibgdx.dispose();
}
@Override
public void pause() {
}
private void rebuildStage () {
skinMenuScreen = new Skin(Gdx.files.internal(AppConstant.SKIN_MENU_SCREE_UI), new TextureAtlas(AppConstant.TEXTURE_ATLAS_UI));
//skinLibgdx = new Skin(Gdx.files.internal(AppConstant.SKIN_LIBGDX_UI), new TextureAtlas(AppConstant.TEXTURE_ATLAS_LIBGDX_UI));
// build all layers
Table layerBackground = buildBackgroundLayer();
Table layerStartControls = buildStartControlsLayer();
// assemble stage for menu screen
stage.clear();
Stack stack = new Stack();
stage.addActor(stack);
stack.setSize(AppConstant.VIEWPORT_GUI_WIDTH,AppConstant.VIEWPORT_GUI_HEIGHT);
stack.add(layerBackground);
stack.add(layerStartControls);
}
private Table buildBackgroundLayer () {
Table layer = new Table();
// + Background
imgBackground = new Image(skinMenuScreen, "welcome");
layer.add(imgBackground);
return layer;
}
private Table buildStartControlsLayer()
{
Table layer = new Table();
// + Sound
TextButtonStyle textButtonStyle = new TextButtonStyle();
BitmapFont bitmapFont = Assets.instance.fonts.bitmapFont;
textButtonStyle.font = bitmapFont;
textButtonStyle.fontColor = Color.DARK_GRAY;
bitmapFont.setScale(1.0F);
textButtonStyle.up = skinMenuScreen.getDrawable("menu-2");
textButtonStyle.down = skinMenuScreen.getDrawable("menu-2");
btnStartGame = new TextButton("Start", textButtonStyle);
layer.addActor(btnStartGame);
btnStartGame.setPosition((AppConstant.VIEWPORT_GUI_WIDTH - 230), 100);
btnStartGame.setSize(150, 50);
// this listener of textButton is not responding
btnStartGame.addListener(new ChangeListener() {
@Override
public void changed (ChangeEvent event, Actor actor) {
onStartClicked();
}
});
layer.add(btnStartGame);
return layer;
}
// this method is not calling
private void onStartClicked()
{
System.out.println("clicked");
game.setScreen(new GameScreen(game));
System.out.println("clicked");
}
TextButton addListener没有响应..
答案 0 :(得分:1)
请参阅以下代码段中的评论:
@Override
public void render(float deltaTime) {
Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
rebuildStage(); //you rebuild your stage inside render method?
stage.act(deltaTime);
stage.draw();
}
你不应该在渲染方法中从头开始重建舞台,因为它会破坏你的游戏的帧速率/响应能力。在此处删除rebuildStage();
。