LorenzoDGreco / Tp1-Robots

0 stars 0 forks source link

Duda manejo de BufferedImage #4

Closed cpiccin closed 6 months ago

cpiccin commented 6 months ago

Hola teniamos una duda, en la logica tenemos una clase que hace que se le pueda asociar a cada entidad un array de imagenes. Hicimos esto para que de alguna forma en la view poder decir que nos muestre cada imagen (esto es nada mas para poder hacer las animaciones) y queriamos saber si es correcto manejar esto en el modelo. La clase Entidad estaria importando import java.awt.image.BufferedImage

package canlor.tp1robots.modelo.entidades;

import canlor.tp1robots.modelo.graficos.HojaSprite;

import java.awt.image.BufferedImage;
import java.util.ArrayList;

public class Entidad {
    private HojaSprite hs;
    private BufferedImage[] fotosEntidad;
    private int indiceImagen;

    private final int[] posicion;
    private boolean activo;

    public Entidad(int x, int y, int[] posImagenes) {
        hs = new HojaSprite();
        posicion = new int[]{x, y};
        activo = true;
        indiceImagen = 0;

        cargarImagenes(posImagenes);
    }
package canlor.tp1robots.modelo.graficos;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class HojaSprite {
    private final static String PATH = "src/main/resources/imagenes/robots.png";
    private final static int SPRITE_ANCHO = 16;
    private final static int SPRITE_ALTO = 16;

    private BufferedImage hojaSprite;

    public HojaSprite() {
        try {
            this.hojaSprite = ImageIO.read(new File(PATH));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public BufferedImage[] getSprites(int[] posiciones) {
        BufferedImage[] sprites = new BufferedImage[posiciones.length];
        for (int i = 0; i < posiciones.length; i++) {
            int index = posiciones[i];
            int columna = index % (hojaSprite.getWidth() / SPRITE_ANCHO);
            sprites[i] = hojaSprite.getSubimage(columna * SPRITE_ANCHO, 0, SPRITE_ALTO, SPRITE_ALTO);
        }
        return sprites;
    }
}
salluzziluca commented 6 months ago

Buenas, si está perfecto, porque de esta forma estrian cumpliendo KISS (keep it simple) y el OCP (open close principle), ya que es muy sencillo agregar vistas a la clase sin la necesidad de refactorizar, dandole a la clase HojaSprite toda la responsabilidad de la imagen pero sin involucrarse en al vista por lo que no viola Separation of Concers ni el SRP.
De nuevo, muy buena solucion ;)