java是否可以向BuffereImage动态添加图像
我正在开发一个小游戏,它使用图像生成关卡内的房间。我使用图像,以便读取不同的颜色,并使用以下代码设置相应的房间:
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));
}
}
下面是我用来生成关卡的图像示例。黑色像素只是空白区域,而红色像素生成块,蓝色像素生成在特定条件下打开的门
我使用此方法生成的第一个房间运行良好。问题是,我不知道如何将房间添加到标高。我想根据玩家离开房间的方向添加一个房间。(如果玩家往南走到一个房间,我希望它在他南边生成一个房间)
要检测播放器的方向,我使用此功能打印正确的方向:
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);
}
这里的'numX'和'numY'是基于中心房间的房间坐标(中心房间有坐标(0,0),而它右边的房间有坐标(1,0)。然后我使用这些坐标来计算房间的最终大小(以像素为单位)
此函数返回它应该生成的房间,然后按如下方式加载:
addImage(new bufferedImageLoader().loadImage("/level_base.png"), room.getX(), room.getY());
addImage(room.getContent(), room.getX(), room.getY());
“addImage()”是上面问题中写的函数
这里要加载的第一个项目是基础,第二个图像是确定房间内容的覆盖图
问题是,每当我尝试加载新房间时,只会显示背景,而不会显示新添加的块。此外,它还删除了玩家刚刚离开的房间的背景,但将块留在那里
有人知道我如何将房间动态添加到这个系统中吗
共 (0) 个答案