有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java LibGDX:无法在我的表中添加纹理

我的质地有问题。这张桌子很好用,但当我尝试添加纹理时,Android Studio并不适合我

private Sprite tiger2;

 batch.begin();
    batch.setColor(tiger2.getColor());
    batch.draw(
            tiger2,
            Gdx.graphics.getWidth() / 2f - tiger2.getRegionWidth() / 2f,
            Gdx.graphics.getHeight() / 2f - tiger2.getRegionHeight() / 2f,
            tiger2.getRegionWidth(),
            tiger2.getRegionHeight()

    );
    batch.end();

 tiger2 = new Sprite(new Texture("tiger2.png"));

我不知道我是否应该这样写:

table.add(tiger2);

我得到这个错误: 无法解析方法“添加(com.badlogic.gdx.graphics.g2d.Sprite)”

table.add(**tiger2**);

共 (2) 个答案

  1. # 1 楼答案

    您正在尝试向表中添加一个Sprite而不是一个Texture,这是出现问题的核心原因。这与执行int i = "Hello World"基本相同,这将产生类似incompatible types的错误。换句话说Integer容器不能容纳String

    如果将鼠标悬停在该行上,您将看到table.add需要一个参与者。如果转到Sprite的定义,您会注意到这并没有以任何方式扩展Actor。因此,执行Actor a = new Sprite()会导致与上面相同的错误,您不能将Sprite object放在Actor container中。这些是编程的核心基础

    那么什么是兼容的演员呢?继承Actor的所有内容,如标签、文本按钮、表格、滚动窗格、窗口、对话等。您也可以扩展Action自己创建自己的Actor,但由于您正在努力解决这个问题,所以应该等待

    最简单的解决方法是使用scene2d.ui.Image。如果你检查这个类,你会看到它从Widget扩展而来,如果你检查Widget,你会看到它从Actor扩展而来,因此Image是一个演员,因为你是你母亲的孩子,也是你祖母的母亲

    如果您检查了Image构造函数所采用的内容,那么您会注意到最简单的方法是创建一个SpriteDrawable,因为图像不采用Sprite,就像table.add也不采用精灵一样SpriteDrawable接受一个精灵,是一个Drawable,它与Image的构造函数兼容

    Image image = new Image(new SpriteDrawable(mySprite));
    table.add(image);
    

    图像也需要一个纹理,所以如果你没有用你的精灵做花哨的Sprite东西,你也可以用Texture来创建图像。您可以通过键入new Image(在IDE中看到这一点,intellisense将让您知道兼容的构造函数

    试着理解这些类型,并使用您的IDE和文档来了解您可以使用什么。使用androidstudio,您可以右键单击一个类并执行goto -> declaration,然后查看相关的类。当然,除非您使用类似记事本的东西,否则其他IDE也有相同的方法

  2. # 2 楼答案

    假设该表是Scene2D表:

    纹理不是演员,不能添加到表中。要解决此问题,可以将纹理添加到图像(包含纹理的演员)。它看起来像这样:

    Image tiger2Image = new Image(new Texture("tiger2.png"));
    table.add(tiger2Image);