ruta relativa obtener java 2d sprite 2d-games

relativa - ¿Cómo extraer parte de esta imagen en Java?



obtener ruta relativa java (2)

Si solo quieres dibujar los sprites, la clase Graphics de Java tiene un método drawImage que drawImage un área específica de la imagen para ti. Solo tiene que especificar la imagen fuente, donde desea dibujar el objeto en su objeto Graphics (x, y, ancho, alto) y en qué marco de la imagen se encuentra el elemento (x, y, ancho, alto) .

Suponiendo que el ancho y la altura del sprite tienen el mismo ancho y alto que desea dibujar en el área de dibujo, puede definir su propio método para dibujar un marco de sprite de la siguiente manera

void drawSpriteFrame(Image source, Graphics2D g2d, int x, int y, int columns, int frame, int width, int height) { int frameX = (frame % columns) * width; int frameY = (frame / columns) * height; g2d.drawImage(source, x, y, x+width, y+height, frameX, frameY, frameX+width, frameY+height, this); }

columns es cuántas columnas hay en tu hoja de sprites. Las dos primeras líneas del método calculan la posición x cualquier y del marco del sprite en su hoja.

Esos sprites grandes en tu hoja requerirán un manejo especial. Podrías dibujarlos con mosaicos (así estarías dibujando cuatro sprites para cada una de las imágenes grandes en este caso), o podrías calcular manualmente qué x, y, ancho y alto usar para esos sprites.

Si tu hoja de sprite fuera una hoja regular (todos los sprites del mismo tamaño) y estuviera dispuesta en un patrón de 5 x 15 como la tuya, dibujarías el 20 fotograma con la siguiente llamada al método

Toolkit tk = Toolkit.getDefaultToolkit(); Image pacman = tk.getImage(getURL("pacman.png")); ... drawFrame(pacman, g2d, x, y, 15, 19, 25, 25);

Aquí, xey son la posición que desea dibujar el sprite en su objeto Graphics, 15 es el número de columnas en su hoja de sprite, 19 es el marco (la numeración comienza en 0), y 25 es el ancho y alto de cada uno sprite (me aproximé).

Tengo esta hoja de sprites:

Pacman sprites http://i39.tinypic.com/145nvp.png

¿Cómo puedo leer este archivo de imagen para extraer parte de él y utilizarlo como sprite ?


Si el área de sprites se lee en un BufferedImage , el método getSubimage se puede usar para obtener una subimagen de la hoja de sprite.

El método getSubimage tomará la x , y , y el width y la height de la subimagen deseada, para que se pueda obtener el sprite deseado. Como la mayoría de los sprites parecen ser del mismo tamaño, creo que la mayoría de ellos pueden ser recuperados por un bucle anidado for iterar a través de la imagen grande.

Por ejemplo, si la imagen del sprite se carga con la clase ImageIO (como el método de read ), y cada sprite tiene un tamaño de 10 píxeles por 10 píxeles, donde hay 5 filas por 5 columnas de sprites, los sprites pueden obtenerse por siguiendo:

BufferedImage bigImg = ImageIO.read(new File("sheet.png")); // The above line throws an checked IOException which must be caught. final int width = 10; final int height = 10; final int rows = 5; final int cols = 5; BufferedImage[] sprites = new BufferedImage[rows * cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { sprites[(i * cols) + j] = bigImg.getSubimage( j * width, i * height, width, height ); } }

El problema es, por supuesto, que el código anterior solo funcionará si todos los sprites son del mismo tamaño, por lo que será necesario realizar algunos ajustes para poder trabajar con la hoja de sprites dada. (Como la esquina superior derecha parece ser de diferente tamaño que las demás).