libGDX 单个标签的滚动窗格不滚动
libGDX Scrollpane not scrolling for single Label
我正在向我使用 libGDX 创建的游戏添加 "How to Play"
说明。说明滚动只需要显示在屏幕的固定区域内,而不是全屏滚动。我创建了一个舞台并添加了一些背景和其他演员,然后是一些标签,它们是标题(在滚动条之外)和说明文本(唯一需要滚动的内容)。它也不应该水平滚动,而是垂直滚动。所以我设置了标签的宽度并包裹了文本。简而言之,我需要完全控制滚动条的位置和大小,它不应该是全屏的。所以我写了下面的代码来添加指令滚动条:
private void addHelpContent()
{
int width = (int) (0.85*alertBounds.width);
int height = scrollStartY - scrollEndY;
int x = Constants.APP_WIDTH/2 - width/2;
BitmapFont font = Model.getInstance().createFont(Constants.ROCK_NORMAL_FONT_FILE_PATH, 20);
Label.LabelStyle labelStyle = new Label.LabelStyle();
labelStyle.font = font;
labelStyle.fontColor = Color.valueOf("A07E10FF");
Label label = new Label(getHelpString(), labelStyle);
label.setWidth(width);
label.setWrap(true);
label.pack();
label.setFillParent(true);
ScrollPane scrollPane = new ScrollPane(label);
scrollPane.setBounds(x, scrollEndY, width, height); //This should be the bounds of the scroller and the scrollable content need to be inside this
scrollPane.layout();
scrollPane.setTouchable(Touchable.enabled);
addActor(scrollPane);
}
但是现在我面临两个问题:
- 我无法滚动滚动窗格。标签在边界处被切断,使 Scrollpane 无用。
- 除了Labels之外的其他actors一开始是不会出现的,只有在我滚动scrollpane之后才会出现(而且不会滚动)。如果我注释掉添加滚动窗格的代码,这个问题就不存在了。所以我确定它与滚动窗格本身有关。
谁能帮我解决这个问题?
滚动面板的工作有点棘手。根据我的理解,您无法设置滚动窗格的大小,因为它会自动将自身调整为与标签相同的大小。
诀窍是将滚动窗格添加到 table。然后,当标签的大小大于 table 的大小时,滚动窗格将允许标签在 table 内滚动。为确保它不会水平滚动,请将 table 的宽度设置为与标签相同的宽度。您也不必设置滚动窗格的边界,让它根据标签自行调整大小。
然后不添加滚动窗格,而是添加包含滚动窗格的 table。
addActor(table);
刚才忘了在class阶段添加act()
方法。添加它解决了问题。
我正在向我使用 libGDX 创建的游戏添加 "How to Play"
说明。说明滚动只需要显示在屏幕的固定区域内,而不是全屏滚动。我创建了一个舞台并添加了一些背景和其他演员,然后是一些标签,它们是标题(在滚动条之外)和说明文本(唯一需要滚动的内容)。它也不应该水平滚动,而是垂直滚动。所以我设置了标签的宽度并包裹了文本。简而言之,我需要完全控制滚动条的位置和大小,它不应该是全屏的。所以我写了下面的代码来添加指令滚动条:
private void addHelpContent()
{
int width = (int) (0.85*alertBounds.width);
int height = scrollStartY - scrollEndY;
int x = Constants.APP_WIDTH/2 - width/2;
BitmapFont font = Model.getInstance().createFont(Constants.ROCK_NORMAL_FONT_FILE_PATH, 20);
Label.LabelStyle labelStyle = new Label.LabelStyle();
labelStyle.font = font;
labelStyle.fontColor = Color.valueOf("A07E10FF");
Label label = new Label(getHelpString(), labelStyle);
label.setWidth(width);
label.setWrap(true);
label.pack();
label.setFillParent(true);
ScrollPane scrollPane = new ScrollPane(label);
scrollPane.setBounds(x, scrollEndY, width, height); //This should be the bounds of the scroller and the scrollable content need to be inside this
scrollPane.layout();
scrollPane.setTouchable(Touchable.enabled);
addActor(scrollPane);
}
但是现在我面临两个问题:
- 我无法滚动滚动窗格。标签在边界处被切断,使 Scrollpane 无用。
- 除了Labels之外的其他actors一开始是不会出现的,只有在我滚动scrollpane之后才会出现(而且不会滚动)。如果我注释掉添加滚动窗格的代码,这个问题就不存在了。所以我确定它与滚动窗格本身有关。
谁能帮我解决这个问题?
滚动面板的工作有点棘手。根据我的理解,您无法设置滚动窗格的大小,因为它会自动将自身调整为与标签相同的大小。
诀窍是将滚动窗格添加到 table。然后,当标签的大小大于 table 的大小时,滚动窗格将允许标签在 table 内滚动。为确保它不会水平滚动,请将 table 的宽度设置为与标签相同的宽度。您也不必设置滚动窗格的边界,让它根据标签自行调整大小。
然后不添加滚动窗格,而是添加包含滚动窗格的 table。
addActor(table);
刚才忘了在class阶段添加act()
方法。添加它解决了问题。