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文件造成截图比较模糊,请见谅:

游戏截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值