2014-12-20 2 views
2

게임용 저장소를 만들고 있는데 libgdx ScrollPane에 문제가 있습니다. 155px로 테이블을 움직이는 것 같습니다. 효과는 테이블이 맨 위에서 대략 155px 아래로 나타나고 마지막 버튼이 화면에서 얼마나 멀리 떨어져 있는지에 관계없이 화면에서 벗어난 것입니다.상단에 공간을 추가하는 Libgdx ScrollPane

"Store"가 처음 나타날 때의 창은 다음과 같습니다.

Top of the scroll pane 테이블 위쪽이 창의 맨 아래에 있습니다. 코드는 아래에 나와 있지만 표에는 10px의 여백 만 있습니다.

내가 할 수있는 한 화면을 스크롤했을 때의 화면입니다. 죄송합니다. 화면을 캡처하기 전에 화면이 사라졌습니다.

Bottom of the scroll pane "메인 메뉴"버튼이 화면에서 반쯤 떨어진 지점에 있음을 알 수 있습니다.

"저장소"를 배치하는 코드는 다음과 같습니다.

table = new Table(); 
table.setFillParent(true); 
table.defaults().expandX().fill().space(5f); 
table.pad(10f); 

// characters 
table.add(new Label("Characters: ", skin, "default")).left().colspan(2); 
table.row(); 
ButtonGroup characterGroup = new ButtonGroup(); 
characterGroup.setMaxCheckCount(1); 
Button boyButton = createImageTextButton("Plain Boy", boyTexture); 
Button catButton = createImageTextButton("Cat Girl", catTexture); 
Button hornButton = createImageTextButton("Horn Girl", hornTexture); 
Button pinkButton = createImageTextButton("Pink Girl", pinkTexture); 
Button queenButton = createImageTextButton("Queen", queenTexture); 
float minHeight = 130f; // only used to force scrolling. 
table.add(boyButton).minHeight(minHeight); 
table.add(catButton).minHeight(minHeight).row(); 
table.add(hornButton).minHeight(minHeight); 
table.add(pinkButton).minHeight(minHeight).row(); 
table.add(queenButton).minHeight(minHeight).colspan(2); 
table.row(); 
characterGroup.add(boyButton, catButton, hornButton, pinkButton, queenButton); 
characterGroup.setChecked("Plain Boy"); 

// drills 
ButtonGroup drillGroup = new ButtonGroup(); 
Button flappyButton = createImageTextButton("Flappy", null); 
Button tappyButton = createImageTextButton("Tappy", null); 
Button tiltyButton = createImageTextButton("Tilty", null); 
table.add(new Label("Drills:", skin, "default")).left().padTop(20).colspan(2); 
table.row(); 
table.add(flappyButton).minHeight(minHeight); 
table.add(tappyButton).minHeight(minHeight).row(); 
table.add(tiltyButton).minHeight(minHeight); 
drillGroup.add(flappyButton, tappyButton, tiltyButton); 
drillGroup.setChecked("Flappy"); 

// main menu button 
table.row(); 
Button mainMenuButton = createImageTextButton("Main Menu", null); 
table.add(mainMenuButton).minHeight(minHeight).padTop(40).padBottom(10f).colspan(2); 

ScrollPane scrollPane = new ScrollPane(table, skin); 
scrollPane.setBounds(0, 0, stage.getWidth(), stage.getHeight()); 
addActor(scrollPane); 

나는 데스크톱 버전을 디버깅 및 테이블의 y 위치는 내가 스크롤하기 전에 -155으로 설정, 나는 아래로 스크롤 한 후 0으로 설정 한 것을 보았다. 그러나 0으로 설정되어 있어도 마지막 버튼은 항상 부분적으로 화면을 벗어납니다.

확인
package com.example; 

import com.badlogic.gdx.ApplicationAdapter; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.scenes.scene2d.Stage; 
import com.badlogic.gdx.scenes.scene2d.ui.Skin; 
import com.badlogic.gdx.utils.viewport.ExtendViewport; 
import com.badlogic.gdx.utils.viewport.Viewport; 
import com.example.stages.GameStage; 

public class MainGame extends ApplicationAdapter { 

    public static final int MIN_WIDTH = 480; 
    public static final int MIN_HEIGHT = 800; 

    public static SpriteBatch batch; 
    public static GameStage game; 
    public static Skin skin; 
    public static Viewport viewport; 
    public static Stage stage; 

    @Override 
    public void create() { 
     viewport = new ExtendViewport(MIN_WIDTH, MIN_HEIGHT); 
     batch = new SpriteBatch(); 
     initSkin(); 
     game = new GameStage(viewport, batch, skin); 
     setStage(game); 
    } 

    @Override 
    public void dispose() { 
     super.dispose(); 
     game.dispose(); 
     skin.dispose(); 
    } 

    public void initSkin() { 
     skin = new Skin(Gdx.files.internal("skins/uiskin.json")); 
    } 

    @Override 
    public void render() { 
     stage.act(Gdx.graphics.getDeltaTime()); 
     stage.draw(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     viewport.update(width, height, true); 
    } 

    public Skin getSkin() { 
     return skin; 
    } 

    public static void setStage(Stage stage) { 
     MainGame.stage = stage; 
     Gdx.input.setInputProcessor(stage); 
    } 
} 
+0

@Townsnflok 코드의 다른 부분에 오류가있는 것 같습니다. 사용자가 얻는 동작을 반영하지 않는 코드가 있다고 생각하기 때문입니다. 아마도 stage.getCamera 또는 일괄 처리를 수정했을 수도 있습니다. 귀하의 코드를 검토하거나 질문에 추가 할 수 있습니다. P.S : 뷰포트를 볼 수도 있고, 내 의견 일뿐입니다. –

+0

카메라와 뷰포트를 추가 할 것이지만 실제로는 변경하지 않고 그냥 최소 크기의 ExtendViewport를 설정하는 것입니다. – Townsfolk

답변

8

가, 마침내 그것을 알아 냈 :

여기 요청으로

내가 뷰포트 카메라를 만드는 코드입니다. ScrollPane 내의 Table은 부모를 채우기 위해 설정할 수 없습니다.

table.setFillParent(true); 

문제가 발생합니다. 이유가 무엇인지 잘 모르지만 setFillParent(true)을 제거하면 문제가 해결됩니다.

+0

LibGDX 1.9.3이더라도 문제는 - ScrollPane 안에 Label (setFillParent 포함)이 있었고 상단에도 큰 차이가있었습니다. 문제가 해결 된 setFillParent를 제거했습니다. 감사! – Max

관련 문제