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文件造成截圖比較模糊,請見諒:

遊戲截圖

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