我在游戏屏幕上有一个平台按钮,我正在尝试制作它,以便用户按下它一次,点击屏幕上的某个地方绘制一个平台,然后如果他们再次点击屏幕,则不会发生任何事情。
现在,在我点击平台按钮之前,没有任何事情发生,这就是我想要的。当我按下平台按钮时,用户可以点击屏幕绘制平台,但是,在按下平台按钮一次后,每次他们点击屏幕时,都会绘制一个平台,所以我很难做到这样他们只能画一个。我认为使用removeProcessor()会有效,但事实并非如此。
InputController inputProcessor;
InputMultiplexer multiplexer;
public GameScreen(FallDown game) {
this.game = game;
GAMESCREEN_STATE = WORLD_STATE_READY;
this.cam = new OrthographicCamera(FRUSTUM_WIDTH, FRUSTUM_HEIGHT);
this.cam.position.set(FRUSTUM_WIDTH / 2, FRUSTUM_HEIGHT / 2, 0);
this.cam.setToOrtho(false, FRUSTUM_WIDTH, FRUSTUM_HEIGHT);
batch = new SpriteBatch();
world = new World();
renderer = new WorldRenderer(batch, world);
cam.position.set(FRUSTUM_WIDTH / 2, 105, 0);
inputProcessor = new InputController(game, world, cam);
multiplexer = new InputMultiplexer();
}
然后,在我的渲染方法结束时,我有
multiplexer.addProcessor(stage);
Gdx.input.setInputProcessor(multiplexer);
这些是我的按钮的监听器,我只是使用重置按钮作为阻止用户绘制平台的替代方法。
reset_button.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
multiplexer.removeProcessor(inputProcessor);
return true;
}
});
platform_button.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y,
int pointer, int button) {
if (GAMESCREEN_STATE != WORLD_STATE_RUNNING) {
multiplexer.addProcessor(new InputController(game, world, cam));
}
return true;
}
});
答案 0 :(得分:2)
好吧,我建议你不要多次添加和删除处理器(特别是渲染方法中的处理器......将其移到构造函数/ create方法中)。
实现您正在寻找的东西的简单方法就是拥有一个布尔变量:
boolean createplatform = false;
然后在按下按钮时将其设置为true,在创建第一个平台时将其设置为false。 (因此,当您触摸屏幕时,该布尔值决定是否创建了平台)。