我正在按照如何在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));
}
我怎么解决这个问题?