button - LibGDX TextButton 不响应鼠标点击

标签 button libgdx stage mouseclick-event

文本按钮正常绘制(没有错误或警告),但它不响应鼠标单击。桌面版和 Android 版本的情况相同。我已经阅读并关注了有关它的每个主题,但没有任何结果。我究竟做错了什么?

也许我需要在舞台对象中设置一些东西?

这是我的 MenuScreen 类代码:

public class MenuScreen implements Screen {
private OrthographicCamera camera;  
private BitmapFont font;
private TextureAtlas menuGraphics;

Stage stage;
TextButton button;
TextButtonStyle buttonStyle;
Skin skin;

public MenuScreen(Game game)
{
    //create satage object
    stage = new Stage();

    //create font object
    font = new BitmapFont(Gdx.files.internal("data/arial-15.fnt"),false);
    font.setColor(Color.RED);

    //load buttons texture atlas and create Skin object
    menuGraphics = new TextureAtlas( Gdx.files.internal( "buttons/buttons.pack" ) );
    skin = new Skin();
    skin.addRegions(menuGraphics);

    // Store the default libgdx font under the name "defaultFont".
    skin.add("defaultFont",font);

    //Set button style
    buttonStyle = new TextButtonStyle();
    buttonStyle.up = skin.newDrawable("yellow");
    buttonStyle.down = skin.newDrawable("orange");
    buttonStyle.checked = skin.newDrawable("orange");
    buttonStyle.over = skin.newDrawable("orange");
    buttonStyle.font = skin.getFont("defaultFont");

    skin.add("default", buttonStyle);

    //assign button style
    button=new TextButton("PLAY",buttonStyle);
    button.setPosition(200, 200);
    button.setSize(200,200);


    //add button to stage
    stage.addActor(button);

    //add click listener to the button
    button.addListener(new ClickListener() {
        public void clicked(InputEvent event, float x, float y) {
            button.setText("Starting new game");
            Gdx.app.log("MenuScreen", "clicked button");

        }
    });

    Gdx.app.log("MenuScreen", "create");
}

@Override
public void resize(int width, int height )
{
    float aspectRatio = (float) width / (float) height;
    camera = new OrthographicCamera(640, 360);
    camera.translate(320,180);
    camera.update();

    stage.setViewport(new FillViewport(640, 360, camera));
    stage.getViewport().setCamera(camera);

    Gdx.app.log( "MenuScreen", "Resizing screen to: " + width + " x " + height );
}

@Override
public void show() {       
    Gdx.input.setInputProcessor(stage);

    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    resize((int)w,(int)h);

    Gdx.app.log( "MenuScreen", "Show screen code" );
}

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

    stage.act( delta );

    // draw the actors
    stage.draw();       
}

@Override
public void dispose()
{

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

}

最佳答案

我终于解决了!

调整大小函数中的附加行就达到了目的:

stage.getViewport().update(width, height); 

我意识到问题是由调整大小功能中设置相机和视口(viewport)引起的。当我删除该代码(调整按钮位置以在标准舞台视口(viewport)中可见)时,按钮开始工作。

但我想使用相机和视口(viewport)。在 LibGDX 文档( https://github.com/libgdx/libgdx/wiki/Scene2d )中阅读有关舞台大小调整的内容,我发现设置相机后,需要更新视口(viewport),否则不会重新计算 Actor 边界。所以我在调整大小函数中添加了视口(viewport)更新行,它开始工作!

新的调整大小功能如下所示:

@Override
public void resize(int width, int height )
{
float aspectRatio = (float) width / (float) height;
camera = new OrthographicCamera(640, 360);
camera.translate(320,180);
camera.update();

stage.setViewport(new FillViewport(640, 360, camera));
stage.getViewport().setCamera(camera);

stage.getViewport().update(width, height);

Gdx.app.log( "MenuScreen", "Resizing screen to: " + width + " x " + height );
}

关于button - LibGDX TextButton 不响应鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27698520/

相关文章:

javascript - 下载按钮可保存已在线的内容

java - 让用户点击的地方出现一个按钮

java - 有没有比 Libgdx 更好的 2D 游戏引擎?

java - Android.LibGDX。 3d 粒子系统不工作(广告牌)

actionscript-3 - STAGE问题

Android:如何将从 SQL 数据库返回的每个元组作为文本放在按钮上?

javascript - Watir 和 Javascript 按钮

android - libgdx box2d 插值效果不佳

java - 舞台中额外的顶部空间是否包含在场景的大小中?

java - LIBGDX:类扩展 scene2d.Stage 时未调用 hit() 方法