Java游戏开发之二

精灵(Sprite)和地图砖块应该使用硬件加速的BufferedImage对象,我们使用ImageIO读取BufferedImage:

BufferedImage image = ImageIO.read(url);
Sprite sprite = new Sprite(image, 96, 96);

在Sprite类中根据传进来的image创建每系列每祯的小图片:

         int  r  =  image.getHeight() / height;
        
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,不能硬件加速。

 下边是测试用的精灵图片:Java游戏开发之二_第1张图片

下边是游戏中的截图,保存成JPG文件造成截图比较模糊,请见谅:

Java游戏开发之二_第2张图片

你可能感兴趣的:(Java游戏开发之二)