[英]LibGDX - Sanity Check - Tiled Maps & The Player
大家! 这是我在StackOverflow上的第一篇文章,我想我可能会在网站上开始大声疾呼寻求帮助!
我目前正在用LibGDX制作游戏,并试图让我的玩家与Tiled地图碰撞,我相信我已经在代码中正确初始化了。
但是,我的程序是NullPointer-ing,它试图查找我指定的TiledMapLayer的tileWidth和tileHeight。
我一直在想这件事,但似乎找不到解决方法...
我究竟做错了什么?
这是我的代码:
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;
}
...
在访问MetaLayer.getTileWidth()
,将在constructor
调用之前加载class变量, MetaLayer
初始化MetaLayer.getTileWidth()
,该MetaLayer
为null。 解决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.