精靈(Sprite)和地圖磚塊應該使用硬件加速的BufferedImage對象,我們使用ImageIO讀取BufferedImage:
BufferedImage image = ImageIO.read(url);
Sprite sprite = new Sprite(image, 96, 96);
在Sprite類中根據傳進來的image創建每系列每禎的小圖片:
int c = image.getWidth()/width;
BufferedImage[][] frames = new BufferedImage[r][c];
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
BufferedImage bi = getGraphicsConfiguration().createCompatibleImage(width, height, Transparency.BITMASK);
Graphics2D g = bi.createGraphics();
g.setComposite(AlphaComposite.Src);
g.drawImage(image, -j*width, -i*height, null);
g.dispose();
frames[i][j] = bi;
}
}
使用方法getGraphicsConfiguration().createCompatibleImage()創建的BufferedImage一般是硬件加速的,不過如果Transparency的類型不是BITMASK或者OPAQUE,是TRANSLUCENT,則要啓用-Dsun.java2d.translaccel=true才能硬件加速,對於遊戲的精靈來說使用BITMASK實現起來也不錯。
使用g.drawImage(image, -j*width, -i*height, null);,避免使用BufferedImage.getSubImage,不能硬件加速。
下邊是測試用的精靈圖片:
下邊是遊戲中的截圖,保存成JPG文件造成截圖比較模糊,請見諒: