게임용 저장소를 만들고 있는데 libgdx ScrollPane
에 문제가 있습니다. 155px로 테이블을 움직이는 것 같습니다. 효과는 테이블이 맨 위에서 대략 155px 아래로 나타나고 마지막 버튼이 화면에서 얼마나 멀리 떨어져 있는지에 관계없이 화면에서 벗어난 것입니다.상단에 공간을 추가하는 Libgdx ScrollPane
"Store"가 처음 나타날 때의 창은 다음과 같습니다.
테이블 위쪽이 창의 맨 아래에 있습니다. 코드는 아래에 나와 있지만 표에는 10px의 여백 만 있습니다.
내가 할 수있는 한 화면을 스크롤했을 때의 화면입니다. 죄송합니다. 화면을 캡처하기 전에 화면이 사라졌습니다.
"메인 메뉴"버튼이 화면에서 반쯤 떨어진 지점에 있음을 알 수 있습니다.
"저장소"를 배치하는 코드는 다음과 같습니다.
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);
}
}
@Townsnflok 코드의 다른 부분에 오류가있는 것 같습니다. 사용자가 얻는 동작을 반영하지 않는 코드가 있다고 생각하기 때문입니다. 아마도 stage.getCamera 또는 일괄 처리를 수정했을 수도 있습니다. 귀하의 코드를 검토하거나 질문에 추가 할 수 있습니다. P.S : 뷰포트를 볼 수도 있고, 내 의견 일뿐입니다. –
카메라와 뷰포트를 추가 할 것이지만 실제로는 변경하지 않고 그냥 최소 크기의 ExtendViewport를 설정하는 것입니다. – Townsfolk