2013-08-01 34 views
5

Tôi đang tạo tiền sảnh trong trò chơi nhiều người chơi, có thể có số lượng người chơi được hiển thị trong một bảng. Tôi có đoạn mã sau:libgdx ScrollPane - Không cuộn?

camera = new OrthographicCamera(WIDTH,HEIGHT); 
    camera.position.set(WIDTH/2,HEIGHT/2, 0); 
    camera.update(); 

    stage = new Stage(); 
    Gdx.input.setInputProcessor(stage); 
    stage.setCamera(camera); 
    stage.setViewport(WIDTH,HEIGHT,false); 

    ScrollPaneStyle paneStyle = new ScrollPaneStyle(); 
    paneStyle.background = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("cavebg")); 
    paneStyle.vScrollKnob = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("GUI/slidernob")); 
    paneStyle.hScroll = paneStyle.hScrollKnob = paneStyle.vScroll = paneStyle.vScrollKnob; 

    Table container = new Table(); 
    table = new Table(); 
    ScrollPane pane = new ScrollPane(table,paneStyle); 
    container.add(pane).width(WIDTH).height(HEIGHT); 
    container.row(); 
    container.setBounds(0,0,WIDTH,HEIGHT); 
    stage.addActor(container); 

    font = new BitmapFont(); 
    color = new Color(0,0,0,1); 
    style = new TextButtonStyle(); 
    style.font = font; 
    style.up = new TextureRegionDrawable(WizardsDuel.atlas.findRegion("GUI/guibg")); 
    style.fontColor = color; 

    handler = new ChangeHandler(); 
    ArrayList<User> users = FirebaseManager.lobbyUsers; 
    for(int i = 0; i < users.size() || i < 100; i++){ 
     TextButton tmp = new TextButton("",style); 
     tmp.scale(2); 
     //tmp.setText(users.get(i).name); 
     tmp.setText(i+ " asdf"); 
     tmp.addListener(handler); 
     table.add(tmp).width(WIDTH/4f); 
     if(i%2 == 1 && i > 0) 
      table.row(); 
    } 

Mặc dù cách thức mà bàn kéo dài rõ ràng dưới đáy của màn hình (mà phải là đáy của ô cuộn), không có thanh cuộn, và nhấp vào và kéo Không lam gi cả.

Ảnh chụp màn hình: enter image description here

Trả lời

2

Vấn đề của tôi là không nhận được đầu vào. Tôi không nên thiết lập bộ xử lý đầu vào trong hàm tạo, bởi vì, màn hình trước đã thiết lập bộ xử lý thành rỗng khi nó bị "ẩn", vì vậy khi tôi di chuyển đường tới phương thức hiển thị của LobbyScreen, nó đã xảy ra sau khi màn hình trước bị ẩn và đầu vào được đặt chính xác.

6

Bạn thực sự cần hai điều. Một Container bên ngoài và một Container bên trong. Bạn làm theo quy định sử dụng hai bảng cho việc này. Vì vậy, đây là một ví dụ nhỏ làm thế nào tôi sử dụng scrollPane. Trên thực tế không có phong cách nhưng nó phải làm cho nó rõ ràng.

this.table = new Table(); 
    this.container = new Table(); 
    scroll = new ScrollPane(table); 
    container.add(scroll).width(500f).height(500f); 
    container.row(); 

Bảng này là bảng bạn sẽ thêm nội dung cần cuộn. Vùng chứa là hộp bên ngoài. Vì vậy, bạn có thể thêm ví dụ một dòng tiêu đề phía trên hộp cuộn của bạn. Hộp bên ngoài (container) không cần kích thước. Khác bạn sẽ không có bất kỳ thanh cuộn hoặc như vậy. Và bạn cần bàn bên trong.

ví dụ đơn giản cho việc thêm:

style = new LabelStyle(font, Color.WHITE); 
label = new Label(null, style); 
table.add(label); 
table.row(); 
label.setAlignment(1); // align center 

cung cấp cho nó nhiều dòng mà nó có thể hiển thị và bạn sẽ có một cửa sổ cuộn. Khác không có thanh cuộn hoặc như vậy.


Tất cả trong một. Bạn chỉ cần bỏ lỡ các container bên ngoài tôi nghĩ. Thêm nó và nó sẽ hoạt động. Đừng quên để giải quyết các kích cỡ.

+0

tôi thêm cointainer bên ngoài, và , nó vẫn không hoạt động. – csga5000

+0

Ngoài ra, bạn đã nhận được Config.VIRTUAL_VIEW_WIDTH ở đâu? – csga5000

+0

... đây là một float tĩnh tôi sử dụng trong programm của tôi. Thay thế nó bằng một số giá trị – BennX

1

sau khi bạn init ScrollPane bạn nên gọi đây là lần đầu tiên

mScrollPane.layout(); 
7

có lẽ bạn quên để làm cho giai đoạn hành động render(), thêm một cái gì đó như:

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

    stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1/30f)); 
    stage.draw(); 
}