我正在试图弄清楚如何让我的游戏在特定地点绘制某个图块,使用图像来表示每个点。因此,如果该图像的像素是红色,则在游戏中将绘制指定的图片(图块),并且每个绿色的像素代表不同的指定图像。我见过制作游戏的人这样做,但我不知道怎么做,我也不知道它的名字。
如果您需要更多信息,我可以尝试解释我想要做的更多事情。有人可以帮忙吗?
答案 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.
}
(无论如何,它会稍快一些,实际上你想要的。)