用java正确表示2d世界
我正在用Java做一个滚动游戏,我想澄清一点。 我没有将游戏级别保存在任何java结构中,我只是读取一个文件(.gif) 我对其进行了如下修改:用java正确表示2d世界,java,2d-games,Java,2d Games,我正在用Java做一个滚动游戏,我想澄清一点。 我没有将游戏级别保存在任何java结构中,我只是读取一个文件(.gif) 我对其进行了如下修改: 我使用颜色解密对每个像素进行解析,并将其放置在 对象符合我确定的要求。 例如: . . . int w = image.getWidth(); //store the dimensions of the level image. int h = image.getHeight(); for(int x = 0; x <
- 我使用颜色解密对每个像素进行解析,并将其放置在
对象符合我确定的要求。
.
.
.
int w = image.getWidth(); //store the dimensions of the level image.
int h = image.getHeight();
for(int x = 0; x < w; x++){
for(int y = 0; y < h; y++){ //check every single pixel with this nested loop
int pixel = image.getRGB(x, y); //get the pixel's rgb value
TYPE_INT_ARGB formatint red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
if(red == 255 && green == 255 && blue == 0)
controller.addPlayer((float)x, (float)y);
else if(red == 255 && green == 255 && blue == 255)
controller.addTerrain(x, y);
}
。
.
.
int w=image.getWidth()//存储标高图像的尺寸。
int h=image.getHeight();
对于(int x=0;x>16)&0xff;
绿色整数=(像素>>8)&0xff;
蓝色整数=(像素)&0xff;
如果(红色==255&&绿色==255&&蓝色==0)
控制器.addPlayer((浮点)x,(浮点)y);
否则如果(红色==255&&绿色==255&&蓝色==255)
控制器。添加地形(x,y);
}
如您所见,我没有在任何结构中保存级别,但我只是扫描表示它的图像文件
- 这样做是个好主意吗
您可以创建一个.txt文件,并创建如下地图:
20
10
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0
0表示空气,1表示可行走的平铺。第一个值是地图宽度,第二个值是地图高度。
我还建议您使用2d数组来存储地图信息。现在您可以使用BufferedReader读取txt文件。希望下面的代码对您有所帮助
private final int TILE_SIZE = 30;
private int[][] blocks;
private void loadMap(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
mapWidth = Integer.parseInt(reader.readLine());
mapHeight = Integer.parseInt(reader.readLine());
blocks = new int[mapHeight][mapWidth];
for(int col = 0; col < mapHeight; col ++) {
String line = reader.readLine();
String[] tokens = line.split(" ");
for(int row = 0; row < numBlocksRow; row++) {
blocks[col][row] = Integer.parseInt(tokens[row]);
}
}
reader.close();
} catch(Exception e) {
e.printStackTrace();
}
}
private void render(Graphics2D g) {
for(int col = 0; col < mapHeight; col ++) {
for(int row = 0; row < numBlocksRow; row++) {
int block = blocks[col][row];
Color color;
if(block == 1) {
color = Color.white;
} else {
color = Color.black;
}
g.fillRect(row * TILE_SIZE, col * TILE_SIZE, TILE_SIZE, TILE_SIZE);
}
}
}
private final int TILE_SIZE=30;
私有int[][]块;
私有void加载映射(文件){
试一试{
BufferedReader reader=新的BufferedReader(新文件读取器(文件));
mapWidth=Integer.parseInt(reader.readLine());
mapHeight=Integer.parseInt(reader.readLine());
块=新的int[mapHeight][mapWidth];
for(int col=0;col
加载可能会稍微慢一点,你不必每次加载游戏时都去gif->level,你可以做一次,将结果存储为.txt或任何其他文件。在像素上进行迭代和操作是昂贵的。我知道,当我写BL时,我发现只有这种方法可以做到,你能告诉我更快的方法吗?我加载一次,因为对于my游戏我创造了一个关卡。