Это может быть медленнее в долгосрочной перспективе.Я определенно рекомендую вам использовать байтовый массив для представления тайлов, т.е. byte [width] [height].Это будет быстрее, проще в управлении и легче распространяться на что-то вроде spriteData [ширина] [высота], если один байт не будет предоставлять достаточно информации.
Однако, если вы настаиваете на использовании изображения для храненияигровые данные, вы можете использовать что-то вроде следующего:
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.
}
(что в любом случае будет немного быстрее и на самом деле то, что вы хотите.)