1

我在游戏屏幕上有一个平台按钮,我试图让它让用户按下它一次,点击屏幕上的某个地方来绘制一个平台,然后如果他们再次点击屏幕,什么都不会发生。

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

1 回答 1

2

好吧,我建议您不要多次添加和删除处理器(尤其是渲染方法中的那个..将其移至构造函数/创建方法)。

一个简单的方法来实现你正在寻找的只是有一个布尔变量:

boolean createplatform = false;

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

于 2013-06-18T04:55:52.227 回答