在Slick2D中从文本文件加载平铺地图

时间:2014-02-19 06:10:02

标签: java lwjgl tile slick2d game-development

我正在使用Slick2D库在Java中制作一个相当简单的2D游戏引擎,并且我正在尝试从文本文件加载级别(平铺贴图)。我希望能够加载多个不同的tileset,因此不希望将每个数字分配给这样的tile:

    1 1 1 1 1
    1 0 0 0 1
    1 0 0 0 1
    1 0 0 0 1
    1 1 1 1 1

    (Where 1 is a wall and 0 is a floor)

相反,我希望能够在tilemap中使用x和y坐标来表示tile上面和下面有多少个tile位于tileset上,如下所示:

    0,0 0,0 0,0
    0,0 1,0 0,0
    0,0 0,0 0,0

    (0,0 is the tile in the upper left hand corner of the tileset, 1,0 is the second tile in the tileset)

我遇到的主要问题是读取文本文件并将逗号前面的整数存储为Pos1(X值)和逗号之后的所有内容,但是在空格前面作为Pos2(Y值)

我该怎么做?我会使用常规文件阅读器,缓冲阅读器还是扫描仪?

另外,顺便说一下,我知道Slick2D内置了读取Tiled Map(.tmx)文件的功能,但由于我的游戏引擎将内置一个tile map编辑器,我想使用常规文本文件

1 个答案:

答案 0 :(得分:0)

如果您需要使用该格式的文件,以便可以在文本编辑器中打开它们,那么我将使用BufferedReader读取文件,然后在每行中读取字符串并在每个空格中首先拆分行在每个逗号处,然后解析字符串以返回您的号码。

try(BufferedReader in = new BufferedReader(new FileReader("file"))){
    String line;
    while((line=in.readLine())!=null){
        String[] values = line.split(" ");
        for(String v:values){
            String[] coords = v.split(",");
            int x = Integer.parseInt(coords[0]);
            int y = Integer.parseInt(coords[1]);
}

但是,更简单的方法是直接从地图编辑器中编写int值,而不是将它们转换为字符串。如果你这样做,那么你将节省空间,你需要做的就是读取数据:

try(DataInputStream in= new DataInputStream(new BufferedInputStream(new FileInputStream(new File("file"))))){
    int numValues=in.readInt();
    for(int i=0;i<numValues;i++){
        int x = in.readInt();
        int y = in.readInt();
    }
}

在你的地图编辑器中保存地图,你只需要将文件的数量写入文件,然后将每个图块的x和y坐标与writeInt()和DataOutputStream对齐。

您可能还想将地图的宽度和高度写入文件,以便您可以重建它(如果这些不是常量)或地图上瓷砖的坐标。