2015-09-02 123 views
0

我想創建一個工具欄。如果我點擊一個圖標,應打開一個列表。我使用堆棧添加容器(圖標列表),並添加一個表。 (所以所有得到重新調整,並沒有工作需要做那裏)libGDX:創建一個工具欄

但我不能通過container.setX(浮動)設置X軸。但是列表必須在點擊圖標下打開。

有沒有更好的方法或方法來設置X沒有聲明?

private void rebuildStage() { 
    VerticalGroup toolBar = buildToolBar(); 

    VerticalGroup vGroup = new VerticalGroup(); 
    vGroup.fill().setFillParent(true); 
    vGroup.addActor(toolBar); 

    clear(); 
    addActor(vGroup); 
} 

private VerticalGroup buildToolBar() { 
    ImageButton btnFile = new ImageButton(Assets.instance.btn_skin, "file"); 
    ImageButton btnArrangement = new ImageButton(Assets.instance.btn_skin, "arrangement"); 
    ImageButton btnCollision = new ImageButton(Assets.instance.btn_skin, "collision"); 

    ButtonGroup<ImageButton> buttonGroup = new ButtonGroup<ImageButton>(btnFile, btnArrangement, btnCollision); 
    buttonGroup.setMinCheckCount(0); 

    Container<Table> tableFile = new Container<Table>(buildTableFile()); 
    tableFile.top().left(); 
    Container<Table> tableArrangement = new Container<Table>(buildTableArrangement()); 
    tableArrangement.top(); 
    Container<Table> tableCollision = new Container<Table>(buildTableCollision()); 
    tableArrangement.top(); 

    Stack stack = new Stack(); 
    stack.add(tableFile); 
    stack.add(tableArrangement); 
    stack.add(tableCollision); 

    Table layer = new Table(Assets.instance.bg_skin); 
    layer.setBackground("bg_table"); 
    layer.left(); 
    layer.add(btnFile).padLeft(10); 
    layer.add(btnArrangement).padLeft(10); 
    layer.add(btnCollision).padLeft(10); 

    VerticalGroup vGroup = new VerticalGroup(); 
    vGroup.fill(); 
    vGroup.addActor(layer); 
    vGroup.addActor(stack); 
    return vGroup; 
} 

    private Table buildTableFile() { 
    ImageButton button1 = new ImageButton(Assets.instance.btn_skin, "load"); 
    ImageButton button2 = new ImageButton(Assets.instance.btn_skin, "save"); 
    ImageButton button3 = new ImageButton(Assets.instance.btn_skin, "new"); 

    Table layer = new Table(Assets.instance.bg_skin); 
    layer.setBackground("bg_table"); 
    layer.add(button1).pad(10, 10, 0, 10).row(); 
    layer.add(button2).pad(10, 10, 0, 10).row(); 
    layer.add(button3).pad(10, 10, 10, 10).row(); 
    return layer; 
} 

回答

1

您可以直接創建一個新的階段,爲您工具欄超過你在有圖標的階段。

所有你需要做的就是將ClickListener連接到toolbarStage將檢查什麼是點擊的位置,使那裏toolbarStage工具欄 - 當然你可以有另一種ClickListener這將在舊的iconsStage,將設置爲工具欄設置變量(我假設其工作連接到你點擊了哪個圖標)。

Stage iconsStage; 
Viewport iconsStageViewport; 

Stage toolbarStage; 
Viewport toolbarStageViewport; 

public void prepareStages() 
{ 
    ... //here you are creating iconsStage, filling it with actors etc... 

    toolbarStage = new Stage(); 
    toolbarStageViewport = ... //create any viewport you need 

    toolbarStage.setViewport(toolbarStageViewport); 

    ... //now add to toolbarStage a proper listener and listeners to icons etc... 
} 

... 

public void render() 
{ 
    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    iconsStageViewport.update(this.screenWidth, this.screenHeight); 
    iconsStage.act(); 
    iconsStage.draw(); 

    toolbarStageViewport.update(this.screenWidth, this.screenHeight); 
    toolbarStage.act(); 
    toolbarStage.draw(); 
} 

請記住,你可以不使用InputMultiplexer用戶不能超過一個舞臺。你可以在這裏更多的瞭解它:

https://github.com/libgdx/libgdx/wiki/Event-handling

+0

感謝您的4 awser。我發現了另一種方式:我只需要設置:tableList.left.padLeft(offset)。容器不會影響桌子並剛剛移動到右側。 –