问题:
我正在尝试创建一个自上而下2d并使用像素平铺地图样式格式的游戏,类似于自上而下的Minecraft。我想做的方式是有几个不同的瓷砖,绿色和棕色的草不同的色调。我想在1920 * 1080像素区域周围随机生成这4个图块,以产生半现实效果。
思路:
随机选择图块,为它们指定一个数值,选择一个随机数并使用case语句选择相关图块,然后将它们按顺序排列在一个数组中(不知道如何完成)。然后使用Tiled Map渲染它们。任何想法???
试过这个:
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)
答案 0 :(得分:1)
MathUtils.random(3)
也可能会返回0
static int random(int range)
返回0(包括)和指定值(包括)之间的随机数。
所以有一个四分之一的机会currentTile
被访问,而它仍然是{while}循环开始时设置的null
。
添加
case 0:
解决这个问题。
更好的方法是创建一个tile0
到tile3
的数组,并简单地使用数学随机值从这个数组中选择;不需要整个重复的case
代码。
(次要)你用
增加x和y tileX+=16;
tileY+=16;
所以,当你开始工作时,你会得到一条对角线的草砖。你应该在开始时将x,y设置为0,然后只增加x。填充整个水平线时,将x重置为0并增加y。