[英]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:
解決這個問題。
更好的方法是創建一個tile0
到tile3
的數組,然后簡單地使用數學隨機值從該數組中進行選擇。 不需要整個重復的case
代碼。
(次要)您正在同時增加x和y
tileX+=16;
tileY+=16;
因此,當它開始工作時,您會得到一條對角線的草磚。 您應該在開始時將x,y設置為0,然后僅增加x。 當您填滿整個水平線時,將x重置為0並增加y。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.