我正在按照如何在libgdx中制作MarioBros的指南,您可以在CodeSchool Channels 的YouTube上找到它 .
不幸的是我'm stuck at lesson n°13, when he removes the tile of the cell containing the brick when 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);   //!!!!!!!
    }
}

这是堆栈跟踪:

com.mygdx.game.Tools.WorldContactListener.beginContact(WorldContactListener.java:32)中com.mygdx.game.Sprites.Brick.onHeadHit(Brick.java:29)中的线程“LWJGL Application”java.lang.NullPointerException中的异常)com.badlogic.gdx.physics.box2d.World.beginContact(World.java:985)at com.badlogic.gdx.physics.box2d.World.jniStep(Native Method)at com.badlogic.gdx.physics.box2d .World.step(World.java:689)位于com.mygdx.game.Screens.PlayScreen.render的com.mygdx.game.Screens.PlayScreen.update(PlayScreen.java:102)

我试图只调用 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)); 
}

我怎么解决这个问题?