我正在使用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编辑器,我想使用常规文本文件
答案 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对齐。
您可能还想将地图的宽度和高度写入文件,以便您可以重建它(如果这些不是常量)或地图上瓷砖的坐标。