这是我的代码:
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)是假的?
我应该如何检查精灵是否来自同一个“父亲”?
答案 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");
}