【发布时间】: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 按钮是否可见,或者当您单击它以前所在的位置时是否会发生?对我来说这听起来很奇怪,我非常想看看你的整个代码。