libGDX Multiplexer-删除处理器

时间:2013-06-18 02:28:42

标签: java android libgdx

我在游戏屏幕上有一个平台按钮,我正在尝试制作它,以便用户按下它一次,点击屏幕上的某个地方绘制一个平台,然后如果他们再次点击屏幕,则不会发生任何事情。

现在,在我点击平台按钮之前,没有任何事情发生,这就是我想要的。当我按下平台按钮时,用户可以点击屏幕绘制平台,但是,在按下平台按钮一次后,每次他们点击屏幕时,都会绘制一个平台,所以我很难做到这样他们只能画一个。我认为使用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;
        }
    });

1 个答案:

答案 0 :(得分:2)

好吧,我建议你不要多次添加和删除处理器(特别是渲染方法中的处理器......将其移到构造函数/ create方法中)。

实现您正在寻找的东西的简单方法就是拥有一个布尔变量:

boolean createplatform = false;

然后在按下按钮时将其设置为true,在创建第一个平台时将其设置为false。 (因此,当您触摸屏幕时,该布尔值决定是否创建了平台)。