everyone! This is my first post on StackOverflow, and I thought I might start off on the website with a desperate cry for assistance!
I'm currently making a game in LibGDX, and am trying to get my player to collide with a Tiled map, which I believe I've correctly initialized in the code.
However, my program is NullPointer-ing where it is trying to find the tileWidth and the tileHeight of the TiledMapLayer I specified.
I've been rolling this around in my head, but I can't seem to find a solution...
What am I doing wrong?
Here's my code:
public class PlayScreen implements Screen{
EscapeGame game;
Player player;
OrthographicCamera cam;
private TiledMap prototype;
private OrthogonalTiledMapRenderer renderer;
private SpriteBatch batch;
Texture playerTexture;
public PlayScreen(EscapeGame game){
this.game = game;
}
@Override
public void show() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
TmxMapLoader tmx = new TmxMapLoader();
prototype = new TmxMapLoader().load("maps/Prototype2.tmx");
renderer = new OrthogonalTiledMapRenderer(prototype);
cam = new OrthographicCamera();
batch = new SpriteBatch();
playerTexture = new Texture("Sprites/prototagonist1.png");
player = new Player(new Sprite(playerTexture), (TiledMapTileLayer) prototype.getLayers().get("MetaLayer"));
player.setPosition(7 * player.getMeta().getTileWidth(), 11 * player.getMeta().getTileHeight());
}
...
public class Player extends Sprite {
float gravity = 360 * 3.5f;
public Vector2 velocity;
private TiledMapTileLayer MetaLayer; float oldY = getY(), oldX = getX(), tileWidth = MetaLayer.getTileWidth(), tileHeight = MetaLayer.getTileHeight();
//getters and setters
public Player (Sprite sprite, TiledMapTileLayer Meta){
super(sprite);
this.MetaLayer = MetaLayer;
}
public TiledMapTileLayer getMeta() {
return MetaLayer;
}
public void setMeta(TiledMapTileLayer Meta) {
this.MetaLayer = MetaLayer;
}
...
class variable will be loaded before the constructor
invoke, when accessing MetaLayer.getTileWidth()
, MetaLayer
not initialized and it is null. to solve the NPE
modify the code like this
....
private TiledMapTileLayer MetaLayer;
float oldY, oldX, tileWidth, tileHeight;
public Player (Sprite sprite, TiledMapTileLayer Meta){
super(sprite);
this.MetaLayer = Meta;
tileWidth = MetaLayer.getTileWidth();
tileHeight = MetaLayer.getTileHeight();
/** Recommended **/
oldY = getY();
oldX = getX();
}
....
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.