java - 显示按钮 libgdx

标签 java libgdx

我是 LibGDX 的初学者,目前我们 4 人一组制作跳棋游戏。这是学校的一个项目。 我们阻止了棋子的移动,但这不是问题。 我们有一个架构 MVC。 在游戏屏幕上,我们有一个带有棋子的棋盘游戏。我们无法显示棋子,而在其他屏幕上这很容易。 我可以让它出现在游戏板上,但它不可点击。当我添加

stage.getViewport().update(宽度,高度,true)

该按钮出现在游戏板之外,但不可点击,并且游戏板已缩放。

这是一个link各个类别的

问题出在 GameScreen 类上。当我单击位于类 JouerIAJouerJueur 上的播放时,我会执行 setScreen(GameScreen)

所以我只在此处粘贴 GameScreenGameRenderer。如果您需要更多代码来帮助我,我可以粘贴更多。

这是没有添加不同按钮的代码。

GameScreen.java

public class GameScreen implements Screen {

private GameRenderer renderer;
public static String couleur1, couleur2, nom1, nom2;
Stage stage;
Skin skinneon;
OrthographicCamera camera;
TextButton menu;


@Override
public void render(float delta) {

    this.renderer.render(delta);

}

@Override
public void resize(int width, int height) {

    this.renderer.setSize(width, height);

}

@Override
public void show() {
    Plateau plateau;
    ControlPlateau controller;

    Assets.loadGame();

    plateau = new Plateau();
    plateau.ajoutPions();
    controller = new ControlPlateau(plateau);

    this.renderer = new GameRenderer(plateau, controller);
    this.renderer.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());


}

@Override
public void hide() {
    this.renderer.dispose();
    Assets.disposeGame();
}

@Override
public void pause() {
}

@Override
public void resume() {
}

@Override
public void dispose() {

}

}

GameRenderer.java

public class GameRenderer implements Renderer {

    private final Stage stage = new Stage(new FitViewport(10, 10));
    private Table hud;

    protected ControlPlateau controller;


    public GameRenderer(Plateau plateau, ControlPlateau controller) {



    Gdx.input.setInputProcessor(this.stage);
    this.stage.addActor(plateau);
    this.controller = controller;



        /*addListener(new InputListener() {
            public void actionPerformed(InputEvent event) {
               controller.tap();
            }
        });*/
        }

        @Override
        public void render(float delta) {
         Plateau plateau = new Plateau();

         Gdx.gl.glClearColor(.3f, .3f, .4f, 1);
         Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
         this.stage.draw();
         Gdx.input.setInputProcessor(stage);
         Gdx.input.setInputProcessor(new GestureDetector(new ControlPlateau(plateau)));
    }

    @Override
    public void setSize(int width, int height) {
        this.stage.getViewport().update(width, height, false);
        Gdx.graphics.requestRendering();
    }

    @Override
    public void dispose() {
        this.stage.dispose();
    }

}

最佳答案

欢迎来到 Stack Overflow!

简短的回答是您多次重置输入处理器,因此它不会从舞台获取输入。 Gdx.input.setInputProcessor() 一次只能处理一个输入处理器。如果您需要从多个源收集输入,您需要创建一个 [InputMultiplexer][1] 类,为其提供所有输入处理器(即 stage、GestureDetector 等),然后传递 InputMultiplexerGdx.input.setInputProcessor() - 您可以在 libGDX wiki 上找到更多信息.

现在,如果您允许我批评您的表格,您可能还需要考虑其他一些事情:

首先:我是一个普通的 MVC 粉丝,但我建议,如果您将 GameScreen.java 类视为您的 View (毕竟,屏幕就是一个 View ),您可能会省去一些麻烦。然后可以将渲染代码放入 Screen 的 render() 方法中,并避免创建单独的 GameRenderer 类。在我的游戏中,我将所有设置代码都放在 Controller 中(想想应用程序 Controller ,而不是游戏板 Controller 或键盘 Controller ),然后每个屏幕都会获得对 Controller 和模型的引用。

第二:在渲染器中(如果您选择保留它),您需要避免在渲染方法中实例化新对象。在上面的代码中:

@Override
public void render(float delta) {
  Plateau plateau = new Plateau();

  Gdx.gl.glClearColor(.3f, .3f, .4f, 1);
  Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
  this.stage.draw();
  Gdx.input.setInputProcessor(stage);
  Gdx.input.setInputProcessor(new GestureDetector(new ControlPlateau(plateau)));
}

每次调用 render() 时,这都会创建一个新的 Plateau 对象、一个新的 GextureDetector 和一个新的 ControlPlateau 对象 - 可能每秒60次!我强烈建议将这些代码行移至 show() 方法中,以便实例化仅完成一次。

希望这会有所帮助 - 如果您需要进一步说明,请告诉我。

关于java - 显示按钮 libgdx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285202/

相关文章:

Java SimpleDateFormat.parse 抛出 : Unparseable date: "2015-10-06T08:00:00+00:00" (at offset 10)

java - StringIndexOutOfBoundsException 字符串索引超出范围 : 0

java - 我可以使用 gds-setup.jar 自定义我现有的 LibGDX 项目吗?

java - 如何使用hadoop api在vm上运行的hadoop机器上创建目录

java - gl.glClearColor 有什么作用?

java - Libgdx 如何设置PerspectiveCamera的渲染距离?

java - libgdx touchUp 事件

java - (LibGDX And​​roid) 无法实例化 Activity ComponentInfo ClassNotFoundException

java - 如何在 libGDX 游戏项目中避免 "static"

java - Aerogear Unified Push 不按别名过滤