【问题标题】:How to disable a button when switching Screens? (Android LibGDX)切换屏幕时如何禁用按钮? (Android LibGDX)
【发布时间】:2015-08-18 05:32:45
【问题描述】:

我的渲染方法:

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

    int w = GateRunner.WIDTH;
    int h = GateRunner.HEIGHT;

    cam.update();
    cam.setToOrtho(false, w, h);

    Gdx.input.setInputProcessor(this);

    game.batch.begin();

    game.batch.draw(title_background, 0, 0, GateRunner.WIDTH, GateRunner.HEIGHT);
    game.batch.draw(title, (w / 2) - (w / 2), h / 2 + h * 12 / 90, w, (int) (w * 0.5));

    playButtonSprite.setPosition((w / 2) - (w / 2), h / 2 + h / 20);
    playButtonSprite.setSize(w, (int) (w * (144.0 / 1080)));
    playButtonSprite.draw(game.batch);

    game.batch.draw(instructions_button, (w/2) - (w/2), h/2 + h/20 - h*3/40, w, (int) (w * (144.0 / 1080)));
    game.batch.draw(about_button, (w / 2) - (w / 2), h / 2 + h/20 - 2*h*3/40, w, (int)(w*(144.0/1080)));

    game.batch.end();
}

我的 touchDown 方法。

public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    float pointerX = InputTransform.getCursorToModelX(windowWidth, screenX);
    float pointerY = InputTransform.getCursorToModelY(windowHeight, screenY);

    if(playButtonSprite.getBoundingRectangle().contains(pointerX, pointerY)) //Play button
    {
        game.setScreen(new PlayScreen(game));
        dispose();
    }

    return true;
}

我想这样做,所以当我点击播放“按钮”时,它只是一个 Sprite,它会移动到 PlayScreen。我通过检查是否单击了播放精灵的矩形来做到这一点。然而,即使这部分有效,每当我单击 PlayScreen 中的那个矩形区域时,它都会再次运行代码 - 它会重新启动 PlayScreen。我该如何解决这个问题?

编辑:另外,这个问题可能有更好的名称,所以请随时提出建议。

【问题讨论】:

  • 它会切换到与按钮打开的屏幕不同的屏幕吗?
  • 看来你的 touchDown 总是检查你是否刚刚接触了 playButtonSprite 边界。您想设置布尔标志并在您的 if 条件中检查它。另外,我建议重新考虑您的设计,因为您显然在两个屏幕上都有相同的 InputProcessor(因此出现了问题)。
  • @MikeMatusiak 我实际上并没有在我的第二个屏幕上接受输入(实际上还没有太多内容)。我应该如何重做我的辞职?
  • @TobLoef 好吧,按钮应该切换到与按钮所在的屏幕不同的屏幕。但是,当我在新屏幕中单击它时,它仍然会注册,这会重新启动同一屏幕。基本上,屏幕没有变化,但它会重新启动。
  • @4everPixelated 按钮是否可见,或者当您单击它以前所在的位置时是否会发生?对我来说这听起来很奇怪,我非常想看看你的整个代码。

标签: android input libgdx


【解决方案1】:

这是因为当你改变屏幕时,你仍然有相同的输入处理器来检查屏幕的那个矩形是否被点击。按钮是否可见无关紧要。

您可以执行其中一项来修复它...

  • 让每个屏幕都有自己的输入处理器,以满足其需求 - 这是首选选项
  • 有一个输入处理器在处理操作之前检查当前屏幕是什么

或者,研究像 scene2d.ui 这样的框架来为你处理这类事情。

【讨论】:

  • 我支持这个。每个屏幕的输入处理器是要走的路。此外,如果您继续使用 libGDX,您几乎可以肯定在某些时候必须学习 Scene2D UI,因此您不妨把它学完。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2011-09-10
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多