大家好!
我正在使用Libgdx创建类似于Mario Bros的2D游戏。我在YouTube上观看了Mario Bros的教程。我把钻石放在Tiled地图中,让玩家收集这些钻石。我在碰撞中取得了成功。但是,我有两个问题: - 首先,我不能让所有的钻石在碰撞后消失(只有一颗钻石消失)。 - 其次,if(f2.getUserData()instanceof Treasure)不起作用。
这是我的代码:
public TiledMapTileLayer.Cell getCell(){
TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get(8);
return layer.getCell((int) (body.getPosition().x * MainGame.PPM / 64),
(int) (body.getPosition().y * MainGame.PPM / 64));
}
if(f1.getUserData() == "HARRY" && f2.getUserData() == "COINS"){
System.out.println("coins");
//if(f2.getUserData() instanceof Treasure){
System.out.println("Works");
treasure.getCell().setTile(null);
//}
}
我希望当玩家碰撞时,钻石会消失。
但结果是,如果我把(treasure.getCell()。setTile(null);)置于if语句中并不起作用。而且,如果我把它放在没有if语句的情况下,只有一颗钻石消失,而不是玩家碰撞的那颗钻石。我放在Tiled地图中的第一颗钻石消失了
答案 0 :(得分:0)
关于事情的一对夫妇......
在Java ==
中比较Strings
等对象时的引用(如果两者都引用相同的对象,则为true)。所以f2.getUserData() == "COINS"
似乎应该是:"COINS".equals((String) f2.getUserData())
,它会比较所讨论的String
的实际字符序列(也是...... "COINS"
,以避免任何可能的NullPointerException
{1}})。
根据您的代码,if(f2.getUserData() instanceof Treasure)
正在将Treasure
对象与String
进行比较(除非Treasure
扩展String
或其他内容 - 我不熟悉您正在使用的库。
您是否设置了f2.getUserData()
的值?如果是,请使用Treasure
对象而不是String
“COINS”实例。也许它有一个像Treasure coins = new Treasure("COINS")
之类的构造函数。
此代码:treasure.getCell().setTile(null);
引用一个对象(我假设是一个Treasure
对象),未在示例代码中定义(即它可能在某处定义)上面的源代码与提供的示例代码相比)。这可能就是为什么只有一颗钻石消失了。我认为你的意思更像是这个(假设Treasure extends String
或类似的东西......):
if("HARRY".equals(f1.getUserData()) && "COINS".equals(f2.getUserData())){
System.out.println("coins");
if(f2.getUserData() instanceof Treasure){
System.out.println("Works");
((Treasure)f2.getUserData()).getCell().setTile(null);
}
}
希望有帮助并且有意义!