2015-02-10 4 views
0

Это мой код:сравнивающие спрайтов в 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 документации: новый Sprite (Спрайт Спрайт) ... «Создает спрайт, который является копией во всех отношениях из указанный спрайт. "

Но если «а» является копией sprGuy и «б» является копией sprGuy, почему a.equals (б) ложно?

Как проверить, принадлежат ли спрайты от одного и того же «отца»?

ответ

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

Как вы можете видеть в исходном файле libGDX Sprite.java, метод equals() не был реализован для Sprite.

Итак, вы вызываете метод по умолчанию equals() класса Java Object, который просто сравнивает ссылки, которые различаются для двух объектов вашего кода.

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"); 
} 
Смежные вопросы