我实际上是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代码? 我的意思是为什么它是这样的?
我知道它很长但是如果有人可以回答这些话,我会感到高兴...
答案 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。