2016-07-06 7 views
0

私は実際にLibGDXとJavaを初めて使いました。私は何が必要かについてのチュートリアルを見ながらゲームを作成しようとしています。LibGDX instanceof and this

だからここに私は完璧な作品との衝突や

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

をチェックするために、特定のオブジェクトを持っている問題は、だ 私はInteractiveTileObjectsに行くときのコードの最後の部分は、フィクスチャ= body.createFixture(FDEF)であります;私はその特定のオブジェクトにsetUserDataを使用します。ここ はコードです:

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

そして、これは以下の私の特定の目的の一つである:

public class DreamCatcher extends InteractiveTileObjects { 

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

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

あなたは私が

にこれを変更したときに、私は

fixture.setUserData(this) 

を使用して見ることができるように

fixture.setUserData("DreamCatcher") 

それはInteractiveTileObjectsのinstanceofのために私のbeginContact部分では機能しません。 しかし、再び、私は

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

を変更した場合、それは「これは」というinstanceofのコードを動作するようにやっているものを再び完璧な作品の接触を開始? なぜそれはそれのような意味ですか?

私はそれは長い間知っている誰かがこれらに答えることができる場合、私は喜んでいるだろう...

+0

初心者では、文字列を "=="演算子と比較しているようです。これはオブジェクト参照を比較しますが、文字列の実際の値は比較しません。 contact.getFixtureA()。getBody()。getUserData()。equals( "player")のようなものを使用してください。あなたの質問の残りの部分は実際にはかなり不明です。 – Pyves

答えて

1

1)instanceof:javaのinstanceofオペレータで

は、オブジェクトがインスタンスであるかどうかをテストするために使用されます指定された型(クラスまたはサブクラスまたはインタフェース)の

javaのinstanceofは、インスタンスを型と比較するため、型比較演算子とも呼ばれます。 trueまたはfalseを返します。 null値を持つ変数をinstanceof演算子に適用すると、falseが返されます。 instanceof演算子の

例:

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キーワード:

のJavaの使用このキーワードの多くが存在する場合があります。 javaでは、これは現在のオブジェクトを参照する参照変数です。 java thisキーワードの使用

ここでは、この6つのjavaキーワードを使用しています。

  • このキーワードは、現在のクラスインスタンス変数を参照するために使用できます。
  • this()は、現在のクラスコンストラクタを呼び出すために使用できます。
  • このキーワードを使用すると、現在のクラスメソッド(暗黙的に)を呼び出すことができます。
  • これは、メソッド呼び出しの引数として渡すことができます。
  • これは、コンストラクタ呼び出しで引数として渡すことができます。
  • このキーワードを使用して、現在のクラスインスタンスを返すこともできます。

fixture.setUserData("DreamCatcher")fixture.setUserData(this)を変更すると、タイプDreamCatcherはなく、Stringのオブジェクトを期待setUserData()方法としては動作しません。

+0

ああまあありがとうございました答えはついにそれを得ました:) また、私はそれを言うことができないupvoteのことを+15担当者はそれについて申し訳ありません:/ / –

関連する問題