LibGDX instanceof和这个

时间:2016-07-06 08:55:36

标签: java android libgdx box2d

我实际上是LibGDX和Java的新手,我正在尝试通过观看有关我需要做的教程来创建游戏。

所以这里有一个问题,我有特定的对象来检查碰撞和

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

完美无缺, 但是当我去InteractiveTileObjects时,代码的最后一部分是fixture = 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的实例,它在我的beginContact部分中不起作用。 但如果我改变

,再次开始接触
contact.getFixtureB().getUserData() == "DreamCatcher"

它的完美再现是什么"这个"做这个instanceof代码? 我的意思是为什么它是这样的?

我知道它很长但是如果有人可以回答这些话,我会感到高兴...

1 个答案:

答案 0 :(得分:1)

1)instanceof

在java instanceof中,运算符用于测试对象是否是指定类型的实例(类或子类或接口)。

java中的instanceof也称为类型比较运算符,因为它将实例与类型进行比较。它返回true或false。如果我们将instanceof运算符应用于任何具有null值的变量,则返回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这个关键字

这里给出了java这个关键字的6个用法。

  • 此关键字可用于引用当前的类实例变量。
  • this()可用于调用当前的类构造函数。
  • 此关键字可用于调用当前类方法(隐式)
  • 这可以在方法调用中作为参数传递。
  • 这可以在构造函数调用中作为参数传递。
  • 此关键字也可用于返回当前的类实例。
  

fixture.setUserData(this)更改为fixture.setUserData("DreamCatcher")将无法用作setUserData()方法,期望类型为DreamCatcher的对象而非String。