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,不能硬件加速。

 下边是测试用的精灵图片:精灵行走图片

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

游戏截图

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章