Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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 是否可以将图像动态添加到BuffereImage_Java_Image_Game Engine_Bufferedimage - Fatal编程技术网

Java 是否可以将图像动态添加到BuffereImage

Java 是否可以将图像动态添加到BuffereImage,java,image,game-engine,bufferedimage,Java,Image,Game Engine,Bufferedimage,我正在开发一个小游戏,它使用图像生成关卡内的房间。我使用图像,以便读取不同的颜色,并使用以下代码设置相应的房间: private void addImage(BufferedImage image, int x, int y){ int w = image.getWidth(); int h = image.getHeight(); boolean playerSpawned = false; Random r = new Rand

我正在开发一个小游戏,它使用图像生成关卡内的房间。我使用图像,以便读取不同的颜色,并使用以下代码设置相应的房间:

private void addImage(BufferedImage image, int x, int y){
        int w = image.getWidth();
        int h = image.getHeight();
        boolean playerSpawned = false;
        Random r = new Random();
        int fails = 0;

        for (int imageX = x; imageX < w; imageX++)
            for (int imageY = y; imageY < h; imageY++){
                int pixel = image.getRGB(imageX, imageY);

                int green = (pixel >> 8) & 0xff;
                int blue = (pixel) & 0xff;
                int red = (pixel >> 16) & 0xff;

                if(blue == 255)
                    if((!playerSpawned && (r.nextInt(4) + 1) == 4) || fails == 3){
                    handler.addObject(new Player(imageX * 32, imageY * 32, ID.player, handler,this));
                    playerSpawned = true;
                    } else {
                        fails++;
                    }
                if(blue == 200) // handle rotation
                    handler.addObject(new door(imageX * 32, imageY * 32, ID.door,this,0));
                if(green == 0 && red == 0 && blue == 0)
                    if(r.nextInt(100) == r.nextInt(200))
                        handler.addObject(new enemy(imageX * 32, imageY * 32, ID.enemy, handler,this));
            }

        for (int imageX = 0; imageX < w; imageX++)
            for (int imageY = 0; imageY < h; imageY++){
                int pixel = image.getRGB(imageX, imageY);

                int red = (pixel >> 16) & 0xff;

                if(red == 255)
                    handler.addObject(new Block(imageX * 32, imageY * 32, ID.block,this,0));
                if(red == 200)
                    handler.addObject(new Block(imageX * 32, imageY * 32, ID.block,this,1));
                if(red == 175)
                    handler.addObject(new Block(imageX * 32, imageY * 32, ID.block,this,2));
                if(red == 150)
                    handler.addObject(new Block(imageX * 32, imageY * 32, ID.block,this,3));
                if(red == 125)
                    handler.addObject(new Block(imageX * 32, imageY * 32, ID.block,this,4));
            }
    }
“addImage()”是上面问题中写的函数

这里要加载的第一个项目是基础,第二个图像是确定房间内容的覆盖图

问题是,每当我尝试加载新房间时,只会显示背景,而不会显示新添加的块。此外,它还删除了玩家刚刚离开的房间的背景,但将块留在那里


有人知道我如何将房间动态添加到此系统中吗?

保留一个用for循环绘制的
列表。作为一种形状,你可以有一个有边框和背景的矩形,上面有一扇门。我认为这更简单、更动态、更快(像素访问没有那么高的性能)。我正在使用图像轻松创建房间,但如果有更好的方法来创建房间,那会更好。。。我不认为将每个元素保留在它自己的数组中是正确的解决方案,因为这意味着每个元素需要大约20个不同的列表。。。但是,我有一个用于所有元素(所有元素都在同一个元素中)的arraylist,它由addImage()函数填充和更新。保留一个使用for循环绘制的
列表。作为一种形状,你可以有一个有边框和背景的矩形,上面有一扇门。我认为这更简单、更动态、更快(像素访问没有那么高的性能)。我正在使用图像轻松创建房间,但如果有更好的方法来创建房间,那会更好。。。我不认为将每个元素保留在它自己的数组中是正确的解决方案,因为这意味着每个元素需要大约20个不同的列表。。。但是,我有一个用于所有元素的arraylist(所有元素都在同一个元素中),它由addImage()函数填充和更新。
public room nextRoom(int xx, int yy){
        int numX = 0, numY = 0;

        if(xx > this.x + 1024 + 32){
            numX++;
            System.out.println("right");
        }
        if(xx < this.x){
            numX--;
        System.out.println("left");
        }
        if(yy > this.y + 576 + 32){
            System.out.println("up");
            numY++;
        }
        if(yy < this.y){
            System.out.println("down");
            numY--;
        }

        new room(content, numX, numY, manager, game, handler).toString();
        return new room(content, numX, numY, manager, game, handler);
    }
addImage(new bufferedImageLoader().loadImage("/level_base.png"), room.getX(), room.getY());
            addImage(room.getContent(), room.getX(), room.getY());