【问题标题】:LibGDX - Scene2d cannot click on widgetsLibGDX - Scene2d 无法点击小部件
【发布时间】:2014-03-11 15:18:01
【问题描述】:

我在我的应用程序中创建了一个屏幕,其中显示了一个文本字段和一个按钮,但由于某种原因我无法单击它们。你知道可能是什么原因。这是我的代码(我跳过了变量声明):

public class SentenceScreen implements Screen {
public SentenceScreen(Game g) {
    game = g;
}

@Override
public void render(float delta) {
    // TODO Auto-generated method stub
    Gdx.gl.glClearColor(0,0,0,0);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    stage = new Stage();

    Skin skin = new Skin(Gdx.files.internal("uiskin.json"));

    btnLogin = new TextButton("Click me", skin);
    btnLogin.setPosition(300, 50);
    btnLogin.setSize(100, 60);
    stage.addActor(btnLogin);

    textField = new TextField("", skin);
    textField.setPosition(100, 50);
    textField.setSize(190, 60);
    stage.addActor(textField);

    stage.act(delta);
    stage.draw();

    Gdx.input.setInputProcessor(stage);
}
   }

【问题讨论】:

  • 你在render()方法中调用stage = new Stage()?这东西属于 contrucotr 或 show() 方法!我认为您应该首先阅读一些基本的 libgdx 教程。
  • 谢谢,我移动了它,但还是一样。 :?

标签: java widget libgdx scene2d


【解决方案1】:
stage = new Stage();

Skin skin = new Skin(Gdx.files.internal("uiskin.json"));

btnLogin = new TextButton("Click me", skin);
btnLogin.setPosition(300, 50);
btnLogin.setSize(100, 60);
stage.addActor(btnLogin);

textField = new TextField("", skin);
textField.setPosition(100, 50);
textField.setSize(190, 60);
stage.addActor(textField);

Gdx.input.setInputProcessor(stage);

所有这些都不应该在你的 render() 方法中。相反,将实例化放在 show() 方法或您的构造函数中。它还将大大减少延迟。

为什么您的按钮不起作用:您每帧都实例化一个新阶段,并将 InputProcessor 分配给它。在您的实际代码中没有时间来处理实际输入。

你的班级应该是这样的:

public class SentenceScreen implements Screen {
public SentenceScreen(Game g) {
    game = g;
}

@Override
public void render(float delta) {
// TODO Auto-generated method stub
Gdx.gl.glClearColor(0,0,0,0);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

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

@Override
public void show() {

stage = new Stage();

Skin skin = new Skin(Gdx.files.internal("uiskin.json"));

btnLogin = new TextButton("Click me", skin);
btnLogin.setPosition(300, 50);
btnLogin.setSize(100, 60);
stage.addActor(btnLogin);

textField = new TextField("", skin);
textField.setPosition(100, 50);
textField.setSize(190, 60);
stage.addActor(textField);

Gdx.input.setInputProcessor(stage);
}
}

【讨论】:

  • @user43051 很高兴!
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 2015-06-24
  • 2015-10-22
  • 2014-04-18
  • 1970-01-01
相关资源
最近更新 更多