Package invaders101.spritesystem

Source Code of invaders101.spritesystem.ImageCache

package invaders101.spritesystem;

import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;

import javax.imageio.ImageIO;

/**
* resource manager para los sprites del juego.
* <p>
* [singleton]
* <p>
* @author Alejandro Cerutti, Mauricio Blint, Patricio Marrone
*/
public class ImageCache {

    private static ImageCache single = new ImageCache();

    private ImageCache() {
        super();
    }
    /**
     *
     * @return single instance de esta clase
     */
    public static ImageCache getInstance() {
        return single;
    }

    private HashMap<String, Image> images = new HashMap<String, Image>();

    /**
     * Recupera un sprite del store
     *
     * @return Instancia de sprite, conteniendo una imagen acelerada de la referencia pedida
     */
    public Image getImage(String imageUrl) {
        // si el sprite se encuentra en el hashMap, simplemente se retorna
        if (images.get(imageUrl) != null) {
            return images.get(imageUrl);
        }
        BufferedImage sourceImage = getImageFromUrl(imageUrl);

        // crea una imagen acelerada para almacenar es sprite dentro
        GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
        Image image = gc.createCompatibleImage(sourceImage.getWidth(), sourceImage.getHeight(), Transparency.BITMASK);
        //todo esto se hace para que no trabaje la CPU, la placa de video debe hacer el trabajo

        // dibuja nuestra imagen fuente dentro de una imagen acelerada
        image.getGraphics().drawImage(sourceImage, 0, 0, null);
   
        images.put(imageUrl, image);

        return image;
    }

    private BufferedImage getImageFromUrl(String spriteUrl) {
        BufferedImage sourceImage = null;
        try {
            // ClassLoader.getResource() asegura que se busque el sprite en el lugar correcto
            URL url = this.getClass().getClassLoader().getResource(spriteUrl);
            if (url == null) {
                fail("No se encuentra el archivo en la url: " + spriteUrl);
            }
            sourceImage = ImageIO.read(url);
        } catch (IOException e) {
            fail("Falló la carga: " + spriteUrl);
        }
        return sourceImage;
    }

    /**
     * Indica falla al abrir un recurso
     *
     * @param message El mensaje para indicar falla
     */
    private void fail(String message) {
        System.err.println(message);
        System.exit(0);
    }
}
TOP

Related Classes of invaders101.spritesystem.ImageCache

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.