[英]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.