LIBGDX - Table 的文本按钮未填充相应的行
LIBGDX - Table's textButtons are not filling the respective rows
我最近在开发一款使用 Scene2D 的游戏,直到 运行 遇到了这个问题,如图所示:
我可以单击按钮的范围超出了实际的 TextButton 区域
我阅读了 GitHub 页面 here 中的 TableLayouts 文档,并阅读了关于 Scene2D 的不同文章,我尝试摆弄不同的功能(例如 padding、colSpan ) 试图找到解决方案,但我似乎找不到解决这个问题的方法。
这里是负责table设置和绘图的代码:
table = new Table();
table.setDebug(true);
table.add(graphicsButton).width(200f).height(200f);
table.row();
table.add(audioButton).width(200f).height(200f);
table.row();
table.add(backToTitleButton).width(200f).height(200f);
table.setBounds(0, 0, stage.getWidth(), stage.getHeight());
stage.addActor(table);
这是代码的其余部分(请注意,我还没有将按钮中的文本居中,我只添加了填充值,还有 - 我'为方便起见,我们从屏幕 class 中删除了空函数)
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.thesameritan.game.GUI.UI;
public class OptionsScreen extends ScreenProperties implements Screen {
private Stage stage;
private Table table;
OptionsScreen (final Game game) {
super();
stage = new Stage(new ScreenViewport());
Gdx.input.setInputProcessor(stage);
TextButton backToTitleButton = UI.createNewButton("BACK", buttonStyle, 0.8f, 25f, 0.9f); //creates button from another class with text, style, padBottom, padLeft and fontScale
TextButton graphicsButton = UI.createNewButton("GRAPHICS", buttonStyle, 0.9f, 20f, 0.9f);
TextButton audioButton = UI.createNewButton("AUDIO", buttonStyle, 0.9f, 20f, 0.9f);
backToTitleButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
//branch to title
}
});
graphicsButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
//branch to graphics
}
});
audioButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
//branch to options
}
});
table = new Table();
table.setDebug(true);
table.add(graphicsButton).width(200f).height(200f);
table.row();
table.add(audioButton).width(200f).height(200f);
table.row();
table.add(backToTitleButton).width(200f).height(200f);
table.setBounds(0, 0, stage.getWidth(), stage.getHeight());
stage.addActor(table);
}
@Override
public void render (float delta) {
clearScreen(); //from ScreenProperties
stage.draw();
}
@Override
public void dispose() {
disposeObjects(); //from ScreenProperties
stage.dispose();
}
}
我想要的是 在不影响按钮大小的情况下最小化按钮之间的间隙 - 同样,我尝试通过更改 .width()
和 .height()
值或 实际上减小了交互区域的大小(如红线所示)
非常感谢!
这里有趣但缺失的部分是 UI.createNewButton。
您可以调试按钮本身,而不是将调试设置到外部 table:backToTitleButton.setDebug(true)
。您会看到点击范围没有超出按钮区域,但图形表示不正确。我怀疑您没有为矩形使用 Ninepatch。
我最近在开发一款使用 Scene2D 的游戏,直到 运行 遇到了这个问题,如图所示:
我可以单击按钮的范围超出了实际的 TextButton 区域
我阅读了 GitHub 页面 here 中的 TableLayouts 文档,并阅读了关于 Scene2D 的不同文章,我尝试摆弄不同的功能(例如 padding、colSpan ) 试图找到解决方案,但我似乎找不到解决这个问题的方法。
这里是负责table设置和绘图的代码:
table = new Table();
table.setDebug(true);
table.add(graphicsButton).width(200f).height(200f);
table.row();
table.add(audioButton).width(200f).height(200f);
table.row();
table.add(backToTitleButton).width(200f).height(200f);
table.setBounds(0, 0, stage.getWidth(), stage.getHeight());
stage.addActor(table);
这是代码的其余部分(请注意,我还没有将按钮中的文本居中,我只添加了填充值,还有 - 我'为方便起见,我们从屏幕 class 中删除了空函数)
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.thesameritan.game.GUI.UI;
public class OptionsScreen extends ScreenProperties implements Screen {
private Stage stage;
private Table table;
OptionsScreen (final Game game) {
super();
stage = new Stage(new ScreenViewport());
Gdx.input.setInputProcessor(stage);
TextButton backToTitleButton = UI.createNewButton("BACK", buttonStyle, 0.8f, 25f, 0.9f); //creates button from another class with text, style, padBottom, padLeft and fontScale
TextButton graphicsButton = UI.createNewButton("GRAPHICS", buttonStyle, 0.9f, 20f, 0.9f);
TextButton audioButton = UI.createNewButton("AUDIO", buttonStyle, 0.9f, 20f, 0.9f);
backToTitleButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
//branch to title
}
});
graphicsButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
//branch to graphics
}
});
audioButton.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
//branch to options
}
});
table = new Table();
table.setDebug(true);
table.add(graphicsButton).width(200f).height(200f);
table.row();
table.add(audioButton).width(200f).height(200f);
table.row();
table.add(backToTitleButton).width(200f).height(200f);
table.setBounds(0, 0, stage.getWidth(), stage.getHeight());
stage.addActor(table);
}
@Override
public void render (float delta) {
clearScreen(); //from ScreenProperties
stage.draw();
}
@Override
public void dispose() {
disposeObjects(); //from ScreenProperties
stage.dispose();
}
}
我想要的是 在不影响按钮大小的情况下最小化按钮之间的间隙 - 同样,我尝试通过更改 .width()
和 .height()
值或 实际上减小了交互区域的大小(如红线所示)
非常感谢!
这里有趣但缺失的部分是 UI.createNewButton。
您可以调试按钮本身,而不是将调试设置到外部 table:backToTitleButton.setDebug(true)
。您会看到点击范围没有超出按钮区域,但图形表示不正确。我怀疑您没有为矩形使用 Ninepatch。