簡體   English   中英

隨機繪制瓷磚Libgdx Java

[英]Randomly drawing tiles Libgdx Java

問題:

我正在嘗試創建一個自上而下的2d游戲,並使用像素平鋪的地圖樣式格式,類似於自上而下的minecraft。 我想做的方法是有一些不同的瓷磚,草的綠色和棕色的陰影也不同。 我想在1920 * 1080像素區域周圍隨機生成這4個圖塊,以產生半逼真的效果。

思路:

隨機選擇圖塊,為它們分配一個數值,選擇一個隨機數,並使用case語句選擇相關圖塊,然后將它們按順序排列在數組中(不確定如何做到)。 然后使用平鋪地圖渲染它們。 有任何想法嗎???

嘗試過這個:

private void generateTile(){
    System.out.print("tiletry1");
    while(loadedTiles != 8100){

    System.out.print("tiletry");
    Texture currentTile = null;
    int tileX = 0;
    int tileY = 0;


    switch(MathUtils.random(3)){

    case 1:
        tileX+=16;
        tileY+=16;
        loadedTiles ++;
        //game.batch.draw(tile1, tileX, tileY);
        System.out.print("tile1");
        currentTile = tile1;
        break;
    case 2:
        tileX+=16;
        tileY+=16;
        loadedTiles ++;
        //game.batch.draw(tile2, tileX, tileY);
        System.out.print("tile2");
        currentTile = tile2;
        break;
    case 3:
        tileX+=16;
        tileY+=16;
        loadedTiles ++;
        //game.batch.draw(tile3, tileX, tileY);
        System.out.print("tile3");
        currentTile = tile3;
        break;
        }

    //game.batch.begin();
    //game.batch.draw(currentTile, tileX, tileY);
    //game.batch.end();
    }   

}

但是與渲染有關的所有注釋都會出錯,例如刪除這些注釋:

game.batch.begin();
        game.batch.draw(currentTile, tileX, tileY);
        game.batch.end();

給我這個錯誤:

tiletry1tiletrytile2tiletryException in thread "LWJGL Application" java.lang.NullPointerException
at com.badlogic.gdx.graphics.g2d.SpriteBatch.draw(SpriteBatch.java:495)
at com.MKgames.OptionScreen.generateTile(OptionScreen.java:130)
at com.MKgames.OptionScreen.<init>(OptionScreen.java:84)
at com.MKgames.game1.screen.playOptions.render(playOptions.java:76)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.MKgames.Game1.render(Game1.java:39)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:206)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)

根據其文檔MathUtils.random(3)也可能返回0

靜態整數隨機數(整數范圍)
返回介於0(含)和指定值(含)之間的隨機數。

因此,當currentTile仍然是在while循環開始時設置為null時,有currentTile機會訪問currentTile

添加一個

case 0:

解決這個問題。

更好的方法是創建一個tile0tile3的數組,然后簡單地使用數學隨機值從該數組中進行選擇。 不需要整個重復的case代碼。


(次要)您正在同時增加x和y

  tileX+=16;
  tileY+=16;

因此,當它開始工作時,您會得到一條對角線的草磚。 您應該在開始時將x,y設置為0,然后僅增加x。 當您填滿整個水平線時,將x重置為0並增加y。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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