我正在按照有关如何在libgdx制作MarioBros的指南,您可以在YouTube的CodeSchool频道找到它。
不幸的是,我被困在第13课时,当Mario的头碰撞时它移除了包含砖的单元格的瓷砖,你可以在这个youtube link上观看它,分钟为9'00“。 />
当我输入getClass().setTile(null)
时,我得到一个NullPointerException
我试图以各种方式修复它,但仍然没有结果。
public class Brick extends InteractiveTileObject
{
public Brick(World world, TiledMap map, Rectangle bounds)
{
super(world, map, bounds);
fixture.setUserData(this);
setCategoryFilter(MyGdxGame.BRICK_BIT);
}
@Override
public void onHeadHit()
{
Gdx.app.log("Brick", "Collision");
setCategoryFilter(MyGdxGame.DESTROYED_BIT);
getCell().setTile(null); //!!!!!!!
}
}
这是堆栈跟踪:
线程“LWJGL Application”中的异常java.lang.NullPointerException 在com.mygdx.game.Sprites.Brick.onHeadHit(Brick.java:29)at com.mygdx.game.Tools.WorldContactListener.beginContact(世界ContactListener.java:32) 在com.badlogic.gdx.physics.box2d.World.beginContact(World.java:985) 在com.badlogic.gdx.physics.box2d.World.jniStep(Native Method)at at com.badlogic.gdx.physics.box2d.World.step(World.java:689)at at com.mygdx.game.Screens.PlayScreen.update(PlayScreen.java:102)at at com.mygdx.game.Screens.PlayScreen.render
我试图只调用getCell()
并且它可以工作,但应该消失的砖块留在那里......所以我需要在getCell方法上调用setTile(null)
,但是当我尝试它时抛出一个NPE。
这是getCell()方法:
public TiledMapTileLayer.Cell getCell()
{
TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get(1);
return layer.getCell((int) (body.getPosition().x * MyGdxGame.PPM / 16), (int) (body.getPosition().y * MyGdxGame.PPM / 16));
}
我该如何解决这个问题?