随机绘制图块Libgdx Java

时间:2014-08-18 21:03:41

标签: java libgdx tiles

问题:

我正在尝试创建一个自上而下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)

1 个答案:

答案 0 :(得分:1)

根据{{​​3}}

MathUtils.random(3)也可能会返回0

  

static int random(int range)
  返回0(包括)和指定值(包括)之间的随机数。

所以有一个四分之一的机会currentTile被访问,而它仍然是{while}循环开始时设置的null

添加

case 0:

解决这个问题。

更好的方法是创建一个tile0tile3的数组,并简单地使用数学随机值从这个数组中选择;不需要整个重复的case代码。


(次要)你用

增加x和y
  tileX+=16;
  tileY+=16;

所以,当你开始工作时,你会得到一条对角线的草砖。你应该在开始时将x,y设置为0,然后只增加x。填充整个水平线时,将x重置为0并增加y。