Java - 如何使图像代表在游戏中绘制哪个图块?

时间:2012-01-12 07:56:43

标签: java image map 2d tile

我正在试图弄清楚如何让我的游戏在特定地点绘制某个图块,使用图像来表示每个点。因此,如果该图像的像素是红色,则在游戏中将绘制指定的图片(图块),并且每个绿色的像素代表不同的指定图像。我见过制作游戏的人这样做,但我不知道怎么做,我也不知道它的名字。

如果您需要更多信息,我可以尝试解释我想要做的更多事情。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

从长远来看,这实际上可能会更慢。我肯定会建议您使用字节数组来表示切片,即byte [width] [height]。如果单个字节不再提供足够的信息,它将更快,更容易管理并更容易扩展到spriteData [width] [height]之类的东西。

但是,如果您坚持使用图像存储游戏数据,则可以使用以下内容:

File file = new File("mygamedata.jpg");
BufferedImage image = ImageIO.read(file);

// Getting pixel color at position x, y (width, height)
int colour =  image.getRGB(x ,y); 
int red    = (colour & 0x00ff0000) >> 16;
int green  = (colour & 0x0000ff00) >> 8;
int blue   =  colour & 0x000000ff;
System.out.println("Red colour component = " + red);
System.out.println("Green colour component = " + green);
System.out.println("Blue colour component = " + blue); 

每个组件都在(0 ... 255)范围内,您可以使用它来确定正确的图块,即

Graphics2D gfx = (Graphics2D) offScreenImage.getImage();
if (red == 120 && green == 0 && blue == 0) {
  gc.drawImage(tile[whichTileYouWantForRed], x, y, null); // where x and y is the pixel you read.
}

或者,您可以跳过完全提取组件,并简单地使用颜色,即

if (colour == 0x00ff0000) {
  gc.drawImage(tile[whichTileYouWantForRed], x, y, null); // where x and y is the pixel you read.
} 

(无论如何,它会稍快一些,实际上你想要的。)