比较 Libgdx 中的精灵

comparing sprites in Libgdx

这是我的代码:

    private Sprite sprGuy;

    sprGuy  = atlas.createSprite("guy");

    Sprite a = new Sprite(sprGuy);
    Sprite b = new Sprite(sprGuy);

    if (a.equals(b)) {
        System.out.println("a is equal to b");
    }

根据Libgdx文档:new Sprite(Sprite sprite)..."Creates a sprite that is a copy in every way of the specified sprite."

但是如果 'a'sprGuy'b'[= 的副本28=] 是 sprGuy 的副本,为什么 a.equals(b) 是假的?

我应该如何检查精灵是否来自同一个"father"?

如您在 libGDX Sprite.java 源文件中所见,equals() 方法尚未为 Sprite 实现。

所以你正在调用 Java Object class 的默认 equals() 方法,它只是比较引用,这对于你的两个对象是不同的代码。

如果是为了一些简单的事情并且可以控制精灵中纹理的分配,你可以使用这个例子:

private Sprite sprGuy;

sprGuy  = atlas.createSprite("guy");

Sprite a = new Sprite(sprGuy);
Sprite b = new Sprite(sprGuy);

if (a.getTexture().equals(b.getTexture())) {
    System.out.println("a is equal to b");
}

这是我的新方法:

首先,我创建了这个新的 class:

public class SpriteAux {

    public String name;
    public Sprite sprite;

    public SpriteAux(Sprite sprite, String name) {
        this.sprite = sprite;
        this.name = name;       
    }

}

因此,创建包含精灵和名称的新对象,我们可以获取并比较名称:

private Sprite sprGuy;
private Sprite sprBoss;

sprGuy  = atlas.createSprite("guy");
sprBoss  = atlas.createSprite("boss");

SpriteAux a = new SpriteAux(sprGuy, "guy");
SpriteAux b = new SpriteAux(sprGuy, "guy");
SpriteAux c = new SpriteAux(sprBoss, "boss");

if (a.name.equals(b.name)) {                  //This is true!
    System.out.println("a is equal to b");
}

if (a.name.equals(c.name)) {                  //This is false!
    System.out.println("a is equal to c");
}