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

Fil*_*lip 2 java android libgdx

我的质地有问题。该表工作正常,但是当我尝试添加纹理时,Android Studio 不同意我的观点。

private Sprite tiger2;
Run Code Online (Sandbox Code Playgroud)

.

 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();
Run Code Online (Sandbox Code Playgroud)

.

 tiger2 = new Sprite(new Texture("tiger2.png"));
Run Code Online (Sandbox Code Playgroud)

.

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

table.add(tiger2);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:无法解析方法“add(com.badlogic.gdx.graphics.g2d.Sprite)”

table.add(**tiger2**);
Run Code Online (Sandbox Code Playgroud)

Mad*_*nyo 5

您正在尝试向Sprite表中添加 a而不是 a Texture,这是您遇到问题的核心原因。它与执行int i = "Hello World"会产生类似incompatible types. 换句话说,Integer容器不能容纳String.

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

那么什么是兼容的Actor?继承 Actor 的所有东西,例如 Label、TextButton、Table、ScrollPane、Window、Dialogue 等。您也可以扩展Action自己并创建自己的 Actor,但既然您正在为此苦苦挣扎,您应该等待。

最简单的解决方案是使用scene2d.ui.Image. 如果你检查这个类,你会看到它延伸自Widget,如果你检查Widget你看到它延伸自Actor,因此 Image 是一个演员,因为你是你母亲的孩子和你祖母的母亲。

如果您检查Image构造函数所采用的内容,那么您会注意到最简单的做法是创建一个SpriteDrawable,因为 Image 不接受一个Spriteliketable.add也不接受一个 Sprite。SpriteDrawable接受一个精灵并且是一个Drawable与 的构造函数兼容的和Image

Image image = new Image(new SpriteDrawable(mySprite));
table.add(image);
Run Code Online (Sandbox Code Playgroud)

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

尝试了解这些类型并使用您的 IDE 和文档来找出您可以使用的内容。使用 Android Studio,您可以右键单击一个类goto -> declaration并查看相关类。当然,除非您使用的是记事本之类的东西,否则其他 IDE 具有等效的方法。