Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java正确表示2d世界_Java_2d Games - Fatal编程技术网

用java正确表示2d世界

用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 <

我正在用Java做一个滚动游戏,我想澄清一点。 我没有将游戏级别保存在任何java结构中,我只是读取一个文件(.gif) 我对其进行了如下修改:

  • 我使用颜色解密对每个像素进行解析,并将其放置在
    对象符合我确定的要求。
例如:

  .
  .
  .


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);
}
如您所见,我没有在任何结构中保存级别,但我只是扫描表示它的图像文件

  • 这样做是个好主意吗
当然,我使用控制器类存储所有对象,在该类中我创建了一个包含所有游戏对象的arrayList


您可以创建一个.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游戏我创造了一个关卡。