【问题标题】:render loop condition LIBGDX渲染循环条件 LIBGDX
【发布时间】:2014-06-16 13:02:26
【问题描述】:

我正在慢慢学习java/LIBGDX,我有以下方法可以在单击时将图像从黑白更改,然后我在渲染中调用touchGem 方法。

我遇到的麻烦是在渲染中设置一个条件来调用此方法,以在创建新的黑色或白色宝石后停止渲染(正如您现在可以毫无疑问地知道,一旦单击它就会渲染图像一遍又一遍。)

public void touchGem() {

    Gdx.input.setInputProcessor(stage);

    if (touchGemStatus1 < 1) {
        touchGem1 = new Image(touchGemTextureWhite);
        touchGem1.setColor(1, 1, 1, 1);
        touchGem1.setSize(95, 95);
        touchGem1.setPosition(5, 0);
        touchGem1.addListener(new InputListener() {
            public boolean touchDown(InputEvent event, float x, float y,
                    int pointer, int button) {
                return true;
            }

            public void touchUp(InputEvent event, float x, float y,
                    int pointer, int button) {
                if (touchGemStatus1 < 1) {
                    touchGemStatus1 = touchGemStatus1 + 1;

                } else {
                    touchGemStatus1 = touchGemStatus1 - 1;
                }
            }
        });
    } else {
        touchGem1 = new Image(touchGemTextureBlack);
        touchGem1.setColor(1, 1, 1, 1);
        touchGem1.setSize(95, 95);
        touchGem1.setPosition(5, 0);
        touchGem1.addListener(new InputListener() {
            public boolean touchDown(InputEvent event, float x, float y,
                    int pointer, int button) {
                return true;
            }

            public void touchUp(InputEvent event, float x, float y,
                    int pointer, int button) {
                if (touchGemStatus1 < 1) {
                    touchGemStatus1 = touchGemStatus1 + 1;

                } else {
                    touchGemStatus1 = touchGemStatus1 - 1;

                }
            }
        });

    }
}

【问题讨论】:

  • 请提供附加信息:“停止渲染” - 渲染什么?触摸宝石1? “新的黑色或白色宝石” - 它们是什么实例? “正如你毫无疑问可以说的那样”——不,我们不能。请提供您的 render() 方法。点击后是否要将 touchGem1 颜色从黑色切换为白色,反之亦然?
  • 1) 是的,停止渲染 touchGem1,或者更确切地说,在单击时只渲染一次 2)touchGem1 具有黑色或白色纹理,单击时会交换,具体取决于 int touchGemStatus 是 1 还是 0 (点击它会改变) 3)渲染方法只是调用这个方法而已。 4) 是的,这完全正确,我想在点击后将它在黑色到白色之间切换,反之亦然。上面的代码可以工作,但是它会不断地呈现新的颜色,即当白色并单击它时,它会一遍又一遍地呈现黑色图像,直到再次单击它然后它会一遍又一遍地呈现白色。

标签: java loops libgdx render conditional-statements


【解决方案1】:

如果 render() 方法只调用 touchGem(),它根本不会渲染任何东西。要绘制 touchGem1,您的 render() 方法应如下所示:

    @Override
public void render(float deltaTime) {

    deltaTime = Gdx.graphics.getDeltaTime();

    touchGem();

    batch.begin();
    stage.addActor(touchGem1);
    batch.end();
    stage.act(deltaTime);
    stage.draw();

}

【讨论】:

  • 编辑了您上面的评论以匹配我的实际渲染方法(删除了所有不相关的废话。)
  • 如果你在 render() 中添加演员,它会在每一帧添加演员。这是不必要的。您应该删除旧的 touchGem1 并将新的 touchGem1 添加到您的 touchGem() 方法中的舞台。
  • 现在肯定不管是在 render 方法中渲染每一帧还是在 touchGem1 方法中渲染每一帧,因为 touchGem1 在 render 方法中被调用?我最初的问题是我可以在什么条件下调用 render 中的 touchGem1 方法来停止它渲染每一帧,而不是在单击时只渲染一次新颜色。
  • 当然,这很重要
  • 如果我在 touchGem1 方法中移动它,它是否仍不会重复渲染,因为没有任何条件会阻止它?
猜你喜欢
  • 1970-01-01
  • 2018-08-08
  • 2016-06-22
  • 2015-07-04
  • 1970-01-01
  • 2018-07-09
  • 2019-01-07
  • 2010-12-24
  • 1970-01-01
相关资源
最近更新 更多