2016-12-22 4 views
0

게임 개발을 위해 libgdx 1.9.0을 사용하고 있습니다. 여러 개의 버튼이 포함 된 메인 화면에 하나의 스테이지가 있습니다. 게임 개체를 보여주는 다른 화면 코드가 있습니다. 안드로이드 장치의 뒤로 버튼을 누르면 메인 화면의 스테이지가 비활성화되고 버튼에 대한 청취자 기능이 작동하지 않습니다. 메인 화면에서 내가 가진 : 뒤로 버튼을 눌렀을 때 libgdx - 스테이지가 비활성화되었습니다.

public class MainMenuScreen extends ScreenAdapter { 
TextButton button_start; 
TextButtonStyle textButtonStyle; 
BitmapFont font; 

FitViewport viewp; 
Stage stage; 

public MainMenuScreen(IndependentArch game) { 
    this.game = game; 


    /* add GUI controls */ 
    stage = new Stage(new StretchViewport(game.SCREEN_WIDTH, 
      game.SCREEN_Height), game.batcher); 
    Gdx.input.setInputProcessor(stage); 

    textButtonStyle = new TextButtonStyle(); 
    textButtonStyle.font = Assets.font_btitr; 
    textButtonStyle.up = Assets.skin.getDrawable("button"); 
    textButtonStyle.down = Assets.skin.getDrawable("button-down"); 

    button_start = new TextButton(Reshape.doReshape_mirror("start"), 
      textButtonStyle); 
    button_start.setBounds(0, 0, 200, 50); 
    button_start.setPosition(140, 255); 

    button_about.addListener(new ChangeListener() { 
     @Override 
     public void changed(ChangeEvent event, Actor actor) { 

      MyTextInputListener listener = new MyTextInputListener(); 
      Gdx.input.getTextInput(listener, "name", "", 
      "please enter your name."); 

     } 
    }); 

    stage.addActor(button_start); 

} 

public void update() { 
    if (Gdx.input.justTouched()) { 
     stage.getCamera().unproject(
       touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 

    } 
} 

public void draw(float delta) { 
    Gdx.gl.glClearColor(0.09f, 0.28f, 0.2f, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    game.batcher.disableBlending(); 
    game.batcher.begin(); 
    game.batcher.draw(Assets.backgroundRegion[0], 0, 0, game.SCREEN_WIDTH, 
      game.SCREEN_Height); 
    game.batcher.end(); 

    stage.act(delta); 
    stage.draw(); 

    game.batcher.enableBlending(); 
    game.batcher.begin(); 


    game.batcher.draw(Assets.uiskin.findRegion("music"), 
      game.SCREEN_WIDTH - 90, 10, 80, 80); 

    game.batcher.end(); 
} 

@Override 
public void render(float delta) { 
    update(); 
    draw(delta); 
}} 

및 게임 화면에

나는이 :

public class GameScreen implements Screen, InputProcessor { 
OrthographicCamera guiCam; 
    Vector3 touchPoint; 
World world; 
WorldRenderer renderer; 

CameraController camController; 
InputMultiplexer multiplexer; 

GestureDetector gestureDetector; 

/** for debug rendering **/ 

ShapeRenderer debugRenderer = new ShapeRenderer(); 

int lastScore; 
String scoreString; 
float totalGameTime; 

GlyphLayout glyphLayout = new GlyphLayout(); 

public GameScreen(IndependentArch game) { 
    this.game = game; 

    Gdx.input.setCatchBackKey(true); 


    state = GAME_READY; 
    guiCam = new OrthographicCamera(game.SCREEN_WIDTH, game.SCREEN_Height); 
    guiCam.position.set(game.SCREEN_WIDTH/2, game.SCREEN_Height/2, 0); 
    touchPoint = new Vector3(); 

    world = new World(); 
    renderer = new WorldRenderer(game.batcher, world); 
    Gdx.input.setInputProcessor(this); 

    camController = new CameraController(world); 
    multiplexer = new InputMultiplexer(); 
    multiplexer.addProcessor(new GestureDetector(20, 0.5f, 2, 0.15f, 
      camController)); 
    multiplexer.addProcessor(this); 
    Gdx.input.setInputProcessor(multiplexer); 

} 


// * InputProcessor methods ***************************// 

@Override 
public boolean keyDown(int keycode) { 

    if (keycode == Keys.BACK) { 
     game.setScreen(new MainMenuScreen(game)); 
     // Gdx.app.exit(); 
    } 

    return false; 
}} 

답변

1

오버라이드 show() 메인 메뉴 화면에서 방법이 stage

@Override 
public void show() { 
    Gdx.input.setInputProcessor(stage); 
} 
에 입력 프로세서를 설정
+0

감사합니다. – omid

관련 문제