2013-06-18 2 views
1

У меня есть кнопка платформы игрового экрана, и я пытаюсь сделать так, чтобы пользователь нажимал ее один раз, щелкал где-то на экране, чтобы нарисовать одну платформу, а затем, если они щелкнули по экрану опять же ничего не произойдет.libGDX Multiplexer - удаление процессора

Прямо сейчас, прежде чем нажимать кнопку платформы, ничего не происходит, что я хочу. Когда я нажимаю кнопку платформы, пользователь может щелкнуть по экрану, чтобы нарисовать платформу, но после нажатия кнопки платформы один раз, каждый раз, когда они нажимают на экран, платформа набирается, поэтому у меня возникают проблемы с тем, чтобы они могли нарисуйте один. Я думал, что использование 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; 
     } 
    }); 

ответ

2

Ну, я бы посоветовал вам не добавлять и удалять процессоры, которые во много раз (особенно один в методе визуализации .. двигаться, что конструктор/создать метод).

простой способ добиться того, что вы ищете просто логическую переменную:

boolean createplatform = false; 

А затем установить его на истинный при нажатии на кнопку и ложным при создании первой платформы. (Поэтому, когда вы касаетесь экрана, этот логический решает, создается ли платформа).

+0

Вау, я не знаю, почему я об этом не думал. Теперь я чувствую себя глупо. огромное спасибо – Jon

Смежные вопросы