簡體   English   中英

LibGDX-健全性檢查-平鋪的地圖和播放器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM