比较Libgdx中的精灵

时间:2015-02-10 11:21:17

标签: java 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) ...“创建一个精灵,它是指定精灵的复制。”

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

我应该如何检查精灵是否来自同一个“父亲”?

3 个答案:

答案 0 :(得分:1)

正如您在libGDX Sprite.java源文件中所看到的,equals()尚未实现Sprite方法。

因此,您正在调用Java equals()类的默认Object方法,该方法仅比较引用,这些引用对于代码中的两个对象是不同的。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

这是我的新方法:

首先,我创建了这个新类:

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