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

问题描述 投票:0回答:1

我正在使用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编辑器,我想使用常规文本文件。

java lwjgl tile slick2d game-development
1个回答
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();
    }
}

在地图编辑器中保存地图,您只需将文件的数量写入文件,然后使用writeInt()和DataOutputStream将每个切片的x和y坐标都写入。

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

© www.soinside.com 2019 - 2024. All rights reserved.