4
回答
使用BinCompiler将资源文件打包成二进制文件
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

在开发游戏时,总是要使用很多的资源文件,比如:图片、音乐 等。而我们经常会遇到一些商业游戏中都看不到这些资源文件,那是因为商业游戏,一般都会将这些资源文件打包成二进制的文件,然后在程序中读取,并使用。这 样的游戏看上去更显得专业一些,本文我们就来学习一个最简单的将资源文件打包成二进制文件的方法——使用BinCompiler将资源文件打包成二进制文 件。
所需工具:BinCompiler
运行“BinCompiler.exe”,指定要打包的资源文件的路径,和输出二进制文件的路径,如下图所示。


点击create按钮,即在我们制定的位置产生一个bin文件,当然在这个bin文件所在目录还会产生一个index.txt文件。我们在程序中读取这些资源时,需要使用这个index.txt。index.txt文件如下所示:

    FName   Index   Pos Size     

    A_04.png    0   0   4141    

    A_03.png    1   4145    3802    

    A_02.png    2   7951    3813    

    A_01.png    3   11768   3959   

接下来我们可以使用BinReader.java文件中的两个方法来读取这些资源文件了。

代码清单:BinReader.java

    /*******************************************************************************    
     * Reads a file from the BIN file and return data as a byte buffer    
     *******************************************************************************/    
    public byte[] readFile(String binfile, int pos)     
    {     
        byte buffer[];     
        int len;     
        
        try {     
        
            InputStream is = Class.getClass().getResourceAsStream("/" + binfile);     
        
            is.skip(pos);     
        
            len  = (is.read() & 0xFF) << 24;     
            len  |= (is.read() 0xFF) << 16;     
            len  |= (is.read() & 0xFF) << 8;     
            len  |= (is.read() & 0xFF);     
        
            buffer = new byte[len];     
             
            is.read(buffer, 0, buffer.length);     
        
            is.close();     
            is = null;     
             
            System.gc();     
        } catch (Exception e) {     
            buffer = null;     
            e.printStackTrace();     
            System.gc();     
            return null;     
        }     
        
        return buffer;     
    }     
        
    /*******************************************************************************    
     * Reads a file from the BIN file and return data as an Image    
     *******************************************************************************/    
    public Image readImage(String binfile, long pos)     
    {     
        byte buffer[];     
        long len;     
        
        try {     
            InputStream is = Class.getClass().getResourceAsStream("/" + binfile);     
                 
            is.skip(pos);     
                 
            len  = (is.read() & 0xFF) << 24;     
            len  |= (is.read() 0xFF) << 16;     
            len  |= (is.read() & 0xFF) << 8;     
            len  |= (is.read() & 0xFF);     
        
            buffer = new byte[len];     
             
            is.read(buffer, 0, buffer.length);     
        
            is.close();     
            is = null;     
             
            System.gc();     
        } catch (Exception e) {     
            buffer = null;     
            e.printStackTrace();     
            System.gc();     
            return null;     
        }     
        
        return Image.createImage(buffer, 0, buffer.length);     
    }   

可以看出,这两个方法都只需要传入bin文件名和图片对应的pos,pos值就在我们上面所说的index.txt文件中去找对应的就可以了。

例如我们读取一个图片

    Image image = readimage("images.bin", 0);  

可以看出,我们传入的pos的值是0,对应index.txt中就应该是A_04.png。

文章出处:http://yarin.blog.51cto.com/1130898/381934

举报
无鸯
发帖于6年前 4回/1K+阅
顶部