Java - как сделать изображение, представляющее какую плитку рисовать в игре? - PullRequest
0 голосов
/ 12 января 2012

Я пытаюсь понять, как заставить мою игру нарисовать определенную плитку в определенном месте, используя изображение для представления каждого пятна. Таким образом, если бы пиксель этого изображения был красного цвета, то в игре было бы нарисовано указанное изображение (плитка), и каждый зеленый пиксель обозначал другое указанное изображение. Я видел людей, которые делают игры, но я не знаю, как это сделать, и я не знаю названия для этого.

Если вам нужна дополнительная информация, я могу попытаться объяснить, что я хочу сделать больше. Может ли кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 12 января 2012

Это может быть медленнее в долгосрочной перспективе.Я определенно рекомендую вам использовать байтовый массив для представления тайлов, т.е. 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.
} 

(что в любом случае будет немного быстрее и на самом деле то, что вы хотите.)

...