2013-05-19 55 views
1

我有5个按钮,我需要做不同的事情,但他们不需要,我需要知道如何让他们做到这一点。LIBGDX在一个屏幕上制作5个不同的按钮

这是我的代码;

public class MainMenu implements Screen { 

CrazyZombies game; 
Stage stage; 
TextureAtlas atlas; 
Skin skin; 
SpriteBatch batch; 
Button play, option, quit, custom, store, menu; 

public MainMenu(CrazyZombies game) { 
    this.game = game; 
} 

public void create() { 
    stage = new Stage(); 
} 

@Override 
public void render(float delta) { 
    Gdx.gl.glClearColor(0.09f, 0.28f, 0.2f, 1); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

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

    batch.begin(); 
    batch.end(); 
} 

@Override 
public void resize(int width, int height) { 
    if (stage == null) 
     stage = new Stage(width, height, true); 
    stage.clear(); 

    stage.setViewport(854, 480, true); 
    stage.getCamera().translate(-stage.getGutterWidth(), -stage.getGutterHeight(), 0); 

    Gdx.input.setInputProcessor(stage); 

    /** 
    * quit Button 
    */ 

    TextButtonStyle styleQuit = new TextButtonStyle(); 
    styleQuit.up = skin.getDrawable("8layer"); 
    styleQuit.down = skin.getDrawable("8layer"); 

    quit = new Button(styleQuit); 

    quit.addListener(new InputListener() { 
     public boolean touchDown(InputEvent event, float x, float y, 
       int pointer, int button) { 
      return true; 
     } 

     public void touchUp(InputEvent event, float x, float y, 
       int pointer, int button) { 

     } 
    }); 

    /** 
    * End quit Button 
    */ 

    /** 
     * store Button 
     */ 

    TextButtonStyle styleStore = new TextButtonStyle(); 
    styleStore.up = skin.getDrawable("9layer"); 
    styleStore.down = skin.getDrawable("9layer"); 

    store = new Button(styleStore); 

    store.addListener(new InputListener() { 
     public boolean touchDown(InputEvent event, float x, float y, 
       int pointer, int button) { 
      return true; 
     } 

     public void touchUp(InputEvent event, float x, float y, 
       int pointer, int button) { 
      game.setScreen(new StoreScreen(game)); 
     } 
    }); 

    /** 
    * End store Button 
    */ 

    /** 
     * customs Button 
     */ 

    TextButtonStyle styleCustom = new TextButtonStyle(); 
    styleCustom.up = skin.getDrawable("10layer"); 
    styleCustom.down = skin.getDrawable("10layer"); 

    custom = new Button(styleCustom); 

    custom.addListener(new InputListener() { 
     public boolean touchDown(InputEvent event, float x, float y, 
       int pointer, int button) { 
      return true; 
     } 

     public void touchUp(InputEvent event, float x, float y, 
       int pointer, int button) { 
      game.setScreen(new CustomScreen(game)); 
     } 
    }); 

    /** 
    * End customs Button 
    */ 

    /** 
     * Options Button 
     */ 

    TextButtonStyle styleOptions = new TextButtonStyle(); 
    styleOptions.up = skin.getDrawable("11layer"); 
    styleOptions.down = skin.getDrawable("11layer"); 

    option = new Button(styleOptions); 

    option.addListener(new InputListener() { 
     public boolean touchDown(InputEvent event, float x, float y, 
       int pointer, int button) { 
      return true; 
     } 

     public void touchUp(InputEvent event, float x, float y, 
       int pointer, int button) { 
      game.setScreen(new OptionScreen(game)); 
     } 
    }); 

    /** 
    * End Options Button 
    */ 

    /** 
     * Play Button 
     */ 

    TextButtonStyle stylePlay = new TextButtonStyle(); 
    stylePlay.up = skin.getDrawable("7layer"); 
    stylePlay.down = skin.getDrawable("7layer"); 

    play = new Button(stylePlay); 

    play.addListener(new InputListener() { 
     public boolean touchDown(InputEvent event, float x, float y, 
       int pointer, int button) { 
      return true; 
     } 

     public void touchUp(InputEvent event, float x, float y, 
       int pointer, int button) { 
      Gdx.app.log(CrazyZombies.LOG, "un-touched"); 
      game.setScreen(new GameScreen(game)); 
     } 
    }); 

    /** 
    * End Play Button 
    */ 

    /** 
    * start Background 
    */ 

    TextButtonStyle styleMenu = new TextButtonStyle(); 
    styleMenu.up = skin.getDrawable("background"); 

    menu = new Button(styleMenu); 

    /** 
    * End Background 
    */ 

    stage.addActor(menu); 
    stage.addActor(play); 
    stage.addActor(option); 
    stage.addActor(store); 
    stage.addActor(custom); 
    stage.addActor(quit); 

} 

@Override 
public void show() { 
    Audio.playMusic(true); 
    batch = new SpriteBatch(); 
    atlas = new TextureAtlas("data/mainmenu/mainmenu.pack"); 
    skin = new Skin(); 
    skin.addRegions(atlas); 
} 

@Override 
public void hide() { 
    dispose(); 
} 

@Override 
public void pause() { 

} 

@Override 
public void resume() { 

} 

@Override 
public void dispose() { 
    batch.dispose(); 
    skin.dispose(); 
    atlas.dispose(); 
    stage.dispose(); 
    Audio.dispose(); 
} 

public void playButton(Button play) { 

} 
} 

所以我的5个按钮都设置有操作和听众,但现在他们没有做任何事情,当我挑选一个按钮,以测试它的工作原理,但该按钮可以从屏幕上的任何地方进行点击,从而我认为这是按钮区域的问题,但我不知道如何设置它。

我试过.getheight(),.getWidth等,但它仍然是一样的。虽然在我的纹理地图集中,所有图像的高度和宽度都相同,但都会造成一张图像成为我的问题?

+0

是连接到布局资源的按钮? – LanternMike

+0

你是什么意思的布局资源? –

+0

不清楚,如果你已经设置了像R.layout.main这样的布局或者是让按钮出现的东西。一个xml布局文件资源。 – LanternMike

回答

0

其实它比这更简单。您需要设置按钮的边界。使用按钮的.setBounds(x,y,width,height)方法,它们还没有尺寸。设置边界后,点击区域应该是正确的。

看看Table layout libgdx并使用表格。

0

为了您第一个问题,这是你的按钮不会做任何事情,我认为这是因为该事件被传播到所有的按钮,可能是在他们已经被添加到Stage的顺序。问题是您的touchDown()方法返回true。这意味着传播应该停止,然后其他演员的方法不会被调用。 你觉得它什么也没做,但实际上它只是做一些事情,只不过是你的touchDown()方法是空的。

对于你第二个问题,这可能是因为你没有设置你的演员的大小。

相关问题