[英]LibGDX - Sanity Check - Tiled Maps & The Player
everyone! 大家! This is my first post on StackOverflow, and I thought I might start off on the website with a desperate cry for assistance!
这是我在StackOverflow上的第一篇文章,我想我可能会在网站上开始大声疾呼寻求帮助!
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. 我目前正在用LibGDX制作游戏,并试图让我的玩家与Tiled地图碰撞,我相信我已经在代码中正确初始化了。
However, my program is NullPointer-ing where it is trying to find the tileWidth and the tileHeight of the TiledMapLayer I specified. 但是,我的程序是NullPointer-ing,它试图查找我指定的TiledMapLayer的tileWidth和tileHeight。
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. 在访问
MetaLayer.getTileWidth()
,将在constructor
调用之前加载class变量, MetaLayer
初始化MetaLayer.getTileWidth()
,该MetaLayer
为null。 to solve the NPE
modify the code like this 解决
NPE
修改代码
....
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();
}
....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.