比较 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");
}
这是我的代码:
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");
}