2015-08-18 2 views
0

Мой метод отрисовки:Как отключить кнопку при переключении экранов? (Android LibGDX)

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(); 
} 

Мой метод приземление.

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; 
} 

Я хотел сделать так, когда я нажал на кнопку «Play», которая просто Sprite, он будет двигаться в экране воспроизведения. Я сделал это, проверив, был ли прямоугольник, на котором был нажат элемент справки Play. Однако, хотя эта часть работает, всякий раз, когда я нажимаю в этой области прямоугольника в PlayScreen, она снова запускает код - он запускает PlayScreen. Как я могу это исправить?

Редактировать: также может быть лучшее имя для этого вопроса, поэтому не стесняйтесь предлагать.

+0

Переключается ли он на другой экран с той, на которой установлена ​​кнопка? – tobloef

+0

Кажется, ваш touchDown всегда проверяет, просто ли вы коснулись границы playButtonSprite. Вы хотите настроить булевский флаг и проверить его в своем условии if. Кроме того, я бы посоветовал переосмыслить ваш дизайн, потому что вы получили тот же InputProcessor на обоих экранах, видимо (отсюда проблема). – MikeMatusiak

+0

@MikeMatusiak На самом деле я не принимаю входные данные на моем втором экране (на самом деле его немного нет). Как мне переделать мой счёт? – 4everPixelated

ответ

2

Это происходит потому, что, когда вы меняете экран, у вас все еще есть тот же процессор ввода, который проверяет, используется ли этот прямоугольник экрана. Является ли кнопка видимой или нет, не имеет значения.

Вы можете сделать одну из них, чтобы исправить ...

  • сделать каждый экран имеет свой собственный вход процессор, специфичный для своих потребностей - это предпочтительный вариант
  • Есть один входной процессор, который проверяет каков текущий экран перед обращением с действиями

В качестве альтернативы, посмотрите на фреймворки, такие как scene2d.ui, чтобы обрабатывать такие вещи для вас.

+0

Я второй, это входной процессор для каждого экрана. Также, если вы продолжаете использовать libGDX, вы почти наверняка будете в некоторыхнужно научиться пользовательскому интерфейсу Scene2D, чтобы вы могли его переделать. – tobloef

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