从Slick2D中的文本文件加载平铺地图
问题描述:
我正在使用Slick2D库在Java中制作一个相当简单的2D游戏引擎,并试图从文本文件加载级别(平铺地图)。我希望能够在多个不同的tilesets加载,因此不希望每个号码分配给这样的瓷砖:从Slick2D中的文本文件加载平铺地图
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)
相反,我希望能够使用X和Y坐标在tilemap的跨越和向下的瓷砖位于在地形设置,这样的代表有多少瓷砖:
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内置了读取平铺地图(.tmx)文件的功能,但由于我的游戏引擎会有内置的平铺地图编辑器,因此我想使用普通文本文件。
答
如果您需要使用该格式的文件,以便可以在文本编辑器中打开它们,那么我将使用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。
您可能还想要将地图的宽度和高度写入文件,以便在地图上的瓦片坐标不相同的情况下重建该地图。
非常感谢,但是如果坐标有多个数字,比如16x16的tileset呢?你给的第一个例子是将1,2,14作为1,2 1,4 – FidgetyTheGamer
而第二个例子没有逗号,所以没有办法将两位数坐标写入文本文件。 – FidgetyTheGamer
如果你有12,14 13,15作为文本文件中的一行,我的第一个例子首先将字符串拆分为空格,并将12,14和13,15作为单独的字符串存储在String []值中,然后它会在逗号分隔每个字符串,并解析返回的前两个字符串,这会导致12和14在循环的第一次迭代中存储为x和y。至于第二个例子,'readInt()'和'writeInt()'都会接受两位数的整数,或者你给它们的任何其他整数。他们不仅一次处理一位数字,而且还处理整个数字。 – Alex