展会信息港展会大全

使用BinCompiler将资源文件打包成二进制文件
来源:互联网   发布日期:2016-01-13 22:02:08   浏览:2649次  

导读:在开发游戏时,总是要使用很多的资源文件,比如:图片、音乐 等。而我们经常会遇到一些商业游戏中都看不到这些资源文件,那是因为商业游戏,一般都会将这些资源文件打包成二进制的文件,然后在程序中读取,并使......

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

所需工具:BinCompiler

运行 BinCompiler.exe ,指定要打包的资源文件的路径,和输出二进制文件的路径,如下图所示。

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

FNameIndexPos Size

A_04.png004141

A_03.png141453802

A_02.png279513813

A_01.png3117683959

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

代码清单:BinReader.java

01

/*******************************************************************************

02

* Reads a file from the BIN file and return data as a byte buffer

03

*******************************************************************************/

04

public byte[] readFile(String binfile, int pos)

05

{

06

byte buffer[];

07

int len;

08

09

try {

10

11

InputStream is = Class.getClass().getResourceAsStream("/" + binfile);

12

13

is.skip(pos);

14

15

len= (is.read() & 0xFF) << 24;

16

len|= (is.read() 0xFF) << 16;

17

len|= (is.read() & 0xFF) << 8;

18

len|= (is.read() & 0xFF);

19

20

buffer = new byte[len];

21

22

is.read(buffer, 0, buffer.length);

23

24

is.close();

25

is = null;

26

27

System.gc();

28

} catch (Exception e) {

29

buffer = null;

30

e.printStackTrace();

31

System.gc();

32

return null;

33

}

34

35

return buffer;

36

}

37

38

/*******************************************************************************

39

* Reads a file from the BIN file and return data as an Image

40

*******************************************************************************/

41

public Image readImage(String binfile, long pos)

42

{

43

byte buffer[];

44

long len;

45

46

try {

47

InputStream is = Class.getClass().getResourceAsStream("/" + binfile);

48

49

is.skip(pos);

50

51

len= (is.read() & 0xFF) << 24;

52

len|= (is.read() 0xFF) << 16;

53

len|= (is.read() & 0xFF) << 8;

54

len|= (is.read() & 0xFF);

55

56

buffer = new byte[len];

57

58

is.read(buffer, 0, buffer.length);

59

60

is.close();

61

is = null;

62

63

System.gc();

64

} catch (Exception e) {

65

buffer = null;

66

e.printStackTrace();

67

System.gc();

68

return null;

69

}

70

71

return Image.createImage(buffer, 0, buffer.length);

72

}

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

例如我们读取一个图片

1

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

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

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港