Java 表不显示图像

Java 表不显示图像,java,libgdx,widget,scene2d,Java,Libgdx,Widget,Scene2d,哦,好吧。。。经过将近一天的努力,我找不到它,所以。。。给你。我正在使用scene2d 我的问题是,我有一个名为Tile的类,它扩展了扩展widget的Image类,其中的纹理大小为128x128,但当我尝试将其添加到表widget组中时,我的Tile消失了 编辑:我刚刚对表进行了大小检查,并验证了在表中添加一个大小为128x128的平铺后,表显示的大小为0x0。。。这里可能出了什么问题 我已经试过了: 使用addActor而不是add,互动程序可以完美地显示,但无法按我需要的方式使用表格。。。

哦,好吧。。。经过将近一天的努力,我找不到它,所以。。。给你。我正在使用scene2d

我的问题是,我有一个名为Tile的类,它扩展了扩展widget的Image类,其中的纹理大小为128x128,但当我尝试将其添加到表widget组中时,我的Tile消失了

编辑:我刚刚对表进行了大小检查,并验证了在表中添加一个大小为128x128的平铺后,表显示的大小为0x0。。。这里可能出了什么问题

我已经试过了:

使用addActor而不是add,互动程序可以完美地显示,但无法按我需要的方式使用表格。。。 用add添加其他演员,他们就会出现。 在其他参与者中间添加瓦片,而发生的是,瓦片根本没有出现,甚至没有空的空间,如果将空对象添加到表中会发生。 看看首选的瓷砖尺寸是否有问题,它是128x128,这很好。 OBS:我奇怪地观察到的一件事是,当我尝试在我的瓷砖构造函数中使用setDrawable进行纹理->纹理区域->纹理区域的适当转换时,我无法以任何方式绘制它,我只需在构造函数中调用superTexture并观察ImageDrawable构造函数,就可以让它获得我的纹理,我碰巧注意到它在第一次设置drawable时做了一些其他的事情,但这只是第一次。。。 和即使使用superTexture,在将单元格添加到表中时也不会显示。。。 也许问题就在这里?我不知道

我的问题是:

有什么问题? 如果理解问题还不足以解决问题,我该怎么办? Edit2:根据要求,以下是相关代码:

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());
}
}
瓷砖有一个侦听器,当我将其鼠标悬停在其上时,它会改变其纹理。我删除了这些侦听器进行测试,错误仍然在发生,所以。。。不是他们

实现平铺的屏幕有些东西会被注释,因为我希望这样使用它

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);
}
}

该表设置在屏幕中间进行测试。

使用add方法时,Table类在布局子对象时调用getPrefWidth和getPrefHeight

它们的默认值为0

解决方案1在Tile类中重写getPrefWidth和getPrefHeight,并使它们返回您想要的任何内容

解决方案2具有prefSize的链表添加方法。e、 g

table.add(actor).prefSize(200,200);

使用add方法时,Table类在布局子对象时调用getPrefWidth和getPrefHeight

它们的默认值为0

解决方案1在Tile类中重写getPrefWidth和getPrefHeight,并使它们返回您想要的任何内容

解决方案2具有prefSize的链表添加方法。e、 g

table.add(actor).prefSize(200,200);

在badlogic论坛的Tanmay和NateS的帮助下找到了解决方案,他们引导我进一步了解TableLayout

在本例中,子级的原始大小不会影响电路板布局。您需要做的是使用TableLayout设置子项的大小而不是prefSize,因此工作代码如下所示:

board.add(new Tile()).size(128, 128);
只是,一些关于如何使用表格的简单误解


谢谢大家。

在badlogic论坛的Tanmay和NateS的帮助下找到了解决方案,他们引导我进一步了解TableLayout

在本例中,子级的原始大小不会影响电路板布局。您需要做的是使用TableLayout设置子项的大小而不是prefSize,因此工作代码如下所示:

board.add(new Tile()).size(128, 128);
只是,一些关于如何使用表格的简单误解


谢谢大家。

除此之外,如果上述答案对我这样的人不起作用,那么调用image.setScalingScaling.none或image.setScalingScaling.fit也可能是解决办法。

此外,如果上述答案对我这样的人不起作用,调用image.setScalingScaling.none或image.setScalingScaling.fit也可能是解决方法。

如果代码简单且简短,请发布它。代码简单,但它很大,因为它有许多未实现的细节,我需要删除,但无论如何我会发布相关部分。如果代码简单且简短,请发布它。代码简单,但是它很大,因为它有很多我需要删除的未实现的细节,但无论如何我会发布相关部分。尝试链接它,没有效果=/在我代码的另一部分,我遇到了几乎相同的问题,它也不起作用。关于默认值,它看起来不像prefSize是0,因为它显示的是128x128,这是它应该显示的。。。奇怪。无论如何,感谢您的回复o/尝试链接它,没有效果=/在我的代码的另一部分中,我遇到了几乎相同的问题,它也不起作用。关于默认值,它看起来不像prefSize是0,因为它显示的是128x128,这是它应该显示的。。。奇怪。无论如何,谢谢你的回复 o/