哦,好吧......经过将近一天的努力弄明白,无法找到它......就在这里。我使用的是scene2d。
我的问题是这个,我有一个名为" Tile"它扩展了Image类(扩展了widget)并且其中的纹理大小为128x128,但是当我尝试将它添加到表(Widget Group)中时,我的Tile消失了。
编辑:我刚刚对表格进行了大小检查,并确认在表格中添加了尺寸为128x128的平铺后,表格显示为大小为0x0。 ..这里有什么问题吗?
我已经尝试过:
OBS:我奇怪地观察到的一件事是,当我尝试在我的Tile构造函数中使用setDrawable()时(对Texture-> TextureRegion-> TextureRegionDrawable进行适当的转换),我无法获得它通过任何方式绘制,我只是通过在构造函数中调用super(Texture)来获取我的纹理,并观察Image(Drawable)构造函数,我碰巧注意到它在第一次设置drawable时做了一些其他事情,但是第一次...... AND ...即使使用超级(纹理),在向表中添加单元格时也不会显示... 也许问题出在这里?我不知道......
我的问题是:
编辑2:根据要求,以下是相关代码:
public class Tile extends Image{
// Tiles
private Texture unselected;
private Texture selected;
// InputListener for detecting mouse over
private class MouseOver extends InputListener{
public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
setDrawable(new TextureRegionDrawable(new TextureRegion(selected)));
}
}
private class MouseOut extends InputListener{
public void exit(InputEvent event, float x, float y, int pointer, Actor fromActor) {
setDrawable(new TextureRegionDrawable(new TextureRegion(unselected)));
}
}
public Tile(){
super(TextureFactory.unselectedTile());
unselected = TextureFactory.unselectedTile();
selected = TextureFactory.selectedTile();
this.addListener(new MouseOver());
this.addListener(new MouseOut());
}
}
Tile有一个监听器,当我将鼠标移到它上面时会改变它的纹理。我删除了那些用于测试的监听器,但错误仍在发生,所以......不是他们。
实现Tile的屏幕(有些东西被评论,因为我希望像那样使用它...)
public class CombatScreen extends AbstractScreen{
private Table board;
public CombatScreen(SpaceGameMain game, int boardSize) {
// Passing game to super class and getting class name for tracking
super(game);
this.className = this.getClass().getSimpleName();
// Creating tile board
board = new Table();
/*
for(int i = 0; i < boardSize; i++)
{
for(int j = 0; j < boardSize; j++){
board.add(new Tile());
}
board.row();
}
*/
}
@Override
public void show(){
super.show();
board.add(new Tile());
mainStage.addActor(board);
}
public void resize(int width, int height){
super.resize(width, height);
board.setPosition((Gdx.graphics.getWidth() - Tile.width)/2, (Gdx.graphics.getHeight() - Tile.height)/2);
}
}
将表格设置在屏幕中间进行测试。
答案 0 :(得分:3)
在badlogic论坛的Tanmay和NateS的帮助下找到解决方案,他们引导我进一步了解TableLayout。
在这种情况下,孩子的原始大小不会影响“棋盘”布局。你需要做的是使用TableLayout来设置子节点的SIZE(而不是prefSize),所以工作代码是这样的:
board.add(new Tile()).size(128, 128);
就是这样,对如何使用表格有一些简单的误解。
谢谢大家。
答案 1 :(得分:1)
Table类在使用add方法时,在布局子元素时调用getPrefWidth()和getPrefHeight()。
他们的默认值是0。
解决方案1)覆盖Tile类中的getPrefWidth()和getPrefHeight()并让它们返回您想要的任何内容。
解决方案2)使用prefSize的链表添加方法。 e.g。
table.add(actor).prefSize(200,200);
答案 2 :(得分:0)
此外,如果上述答案对其他人(如我)不起作用,则调用image.setScaling(Scaling.none)或image.setScaling(Scaling.fit)也可能是解决方案。