2016-07-06 31 views
0

Nun, ich bin neu in LibGDX und Java und ich versuche, ein Spiel zu erstellen, indem ich Tutorials über was ich tun muss.LibGDX instanceof und dies

hier ist also die Frage, die ich bestimmte Objekte haben Kollision zu überprüfen, mit und

public void beginContact(Contact contact) 
    { 
     if((contact.getFixtureA().getBody().getUserData() == "player" && contact.getFixtureB().getUserData() instanceof InteractiveTileObjects)) 
    { 
     Gdx.app.log("Yeah",""); 
    } 

, die perfekt funktioniert, aber wenn ich zu InteractiveTileObjects der letzte Teil des Codes gehen Befestigung = body.createFixture (FdEF) ; Ich verwende es, umUserData auf diese spezifischen Objekte zu setzen. Hier ist der Code:

bdef.type = BodyDef.BodyType.DynamicBody; 
    bdef.position.set((bounds.getX() + bounds.getWidth()/2)/MainClass.PPM, (bounds.getY() + bounds.getHeight()/2)/MainClass.PPM); 
    body = world.createBody(bdef); 
    shape.setAsBox((bounds.getWidth()/2)/MainClass.PPM, (bounds.getHeight()/ 2)/MainClass.PPM); 
    fdef.shape = shape; 
    fdef.filter.categoryBits=MainClass.BIT_DCATCHER; 
    fixture = body.createFixture(fdef); 

Und das ist eine meiner spezifischen Objekte unter:

public class DreamCatcher extends InteractiveTileObjects { 

    public DreamCatcher(World world, TiledMap map, Rectangle bounds) 
    { 
     super(world, map, bounds); 

     fixture.setUserData(this); 
     setCategoryFilter(MainClass.BIT_DCATCHER); 
    } 

Wie Sie ich sehen

fixture.setUserData(this) 

und wenn ich dies

ändern
fixture.setUserData("DreamCatcher") 

Es funktioniert nicht in meinem beginContact-Teil wegen der instanceof InteractiveTileObjects. Aber wieder in Kontakt beginnen, wenn ich

contact.getFixtureB().getUserData() == "DreamCatcher" 

ändern funktioniert es wieder perfekt, was ist, dass „dies“ zu tun, dass Instanceof Code zu arbeiten? Ich meine, warum ist das so?

Ich weiß, es ist lang, aber ich würde mich freuen, wenn jemand diese beantworten können ...

+0

Als Starter scheinen Sie Zeichenfolgen mit dem Operator "==" zu vergleichen; Dies vergleicht Objektverweise, aber nicht die tatsächlichen Werte der Zeichenfolgen. Verwenden Sie stattdessen etwas wie contact.getFixtureA(). GetBody(). GetUserData(). Equals ("player"). Der Rest Ihrer Frage ist wirklich ziemlich unklar. – Pyves

Antwort

1

1) instanceof:

in Java instanceof Operator zu testen, ob das Objekt eine Instanz ist des angegebenen Typs (Klasse oder Unterklasse oder Schnittstelle).

Das instanceof in Java wird auch als Typvergleichsoperator bezeichnet, da es die Instanz mit dem Typ vergleicht. Es gibt entweder wahr oder falsch zurück. Wenn wir den Operator instanceof mit einer beliebigen Variablen mit einem Nullwert anwenden, wird false zurückgegeben.

Beispiel instanceof-Operator:

class Animal{} 
class Dog1 extends Animal{//Dog inherits Animal 

public static void main(String args[]){ 
Dog1 d=new Dog1(); 
System.out.println(d instanceof Animal);//true 
} 
} 

2) this Stichwort:

Es kann dieses Schlüsselwort viel Verwendung von Java sein. In Java ist dies eine Referenzvariable, die auf das aktuelle Objekt verweist. Verwendung von Java dieses Schlüsselwort

Hier ist die 6 Verwendung von Java dieses Schlüsselwort gegeben.

  • Mit diesem Schlüsselwort kann auf die aktuelle Klasseninstanzvariable verwiesen werden.
  • this() kann verwendet werden, um den aktuellen Klassenkonstruktor aufzurufen.
  • Mit diesem Schlüsselwort kann die aktuelle Klassenmethode aufgerufen werden (implizit)
  • Dies kann als Argument im Methodenaufruf übergeben werden.
  • Dies kann als Argument im Konstruktor Aufruf übergeben werden.
  • Dieses Schlüsselwort kann auch verwendet werden, um die aktuelle Klasseninstanz zurückzugeben.

Ändern fixture.setUserData(this)-fixture.setUserData("DreamCatcher") wird nicht funktionieren wie setUserData() Methode erwartet Objekt vom Typ DreamCatcher und nicht String.

+0

oh gut danke für die Antwort endlich bekam es :) und auch ich kann nicht die upvote Sache sagt es +15 rep Entschuldigung darüber: // –