以往在制作游戏的过程中,每一个场景、过关或者游戏最开始的初始化都要加载图片资源,但是目前的图片是按照用途来归类,比如主角的图片都放在一起,boss的图片都放在一起,背景、游戏中的UI都放在一起等等,在加载过程中我们需要取个别类的图片,也就是要包含几个图片文件的加载过程,如何统计每一个加载过程的在总体进度中的进程和总占用的内存成为一个问题。
针对这个问题我采取的一个解决办法是用一个数组作为一个BOX,将需要加载的图片资源按顺序放在这个BOX中,在初始化时,会自动统计这个BOX的容量,以这个box统计的容量作为整个加载过程的上限,加载的图片序号作为进度,例如:分别将图片数为3,4,5的图片数组放入BOX中,则统计的数组上限是3+4+5 = 12,加载进度是Index/12,同时可以统计到每一个Index占用的内存和图片大小。
下面是一个完整的例子:
图片在文件中的位置数组
short [] dataBoss0
short [] dataBoss2
short [] dataBoss3
short [] dataBoss4
图片的存放路径
String pathBoss0 = " /Resource/boss0.mid " ;
String pathBoss2 = " /Resource/boss2.mid " ;
String pathBoss3 = " /Resource/boss3.mid " ;
String pathBoss4 = " /Resource/boss4.mid " ;
short [][] dataBox; 数据BOX
String[] pathBox; 路径BOX
short index = 0 ; 总数
short i = 0 ; 当前index
int m = 0 ,n = 0 ; 在Player中的坐标
Image[][] player; 生成后的图片存放数组
初始化过程
public void CreatDataBox() ... {
dataBox = new short[][]...{dataBoss0,dataBoss2,dataBoss3,dataBoss4};
pathBox = new String[]...{pathBoss0,pathBoss2,pathBoss3,pathBoss4};
index = 0;
player = new Image[dataBox.length][0];
for (int i = 0;i<dataBox.length;i++)...{
index += dataBox[i].length;
player[i] = new Image[dataBox[i].length];
}
Init = true;
}
加载过程
public void Load() ... {
this.m = 0;
this.n = this.i;
for(int im = 0;im<dataBox.length;im++)...{
if(n >= dataBox[im].length)...{
if(m<dataBox.length-1)...{
m ++;
}
n -=dataBox[im].length;
}
else...{
break;
}
}
player[m][n]=loadImage(readImage(getStart(dataBox[m],(short) n),dataBox[m][n],pathBox[m]),0,dataBox[m][n]);
memory += (player[m][n].getWidth()*player[m][n].getHeight()*2);
if (this.i < index)...{
this.i ++;
}
else...{
Complete = true;
}
}
short [] dataBoss0
short [] dataBoss2
short [] dataBoss3
short [] dataBoss4
图片的存放路径
String pathBoss0 = " /Resource/boss0.mid " ;
String pathBoss2 = " /Resource/boss2.mid " ;
String pathBoss3 = " /Resource/boss3.mid " ;
String pathBoss4 = " /Resource/boss4.mid " ;
short [][] dataBox; 数据BOX
String[] pathBox; 路径BOX
short index = 0 ; 总数
short i = 0 ; 当前index
int m = 0 ,n = 0 ; 在Player中的坐标
Image[][] player; 生成后的图片存放数组
初始化过程
public void CreatDataBox() ... {
dataBox = new short[][]...{dataBoss0,dataBoss2,dataBoss3,dataBoss4};
pathBox = new String[]...{pathBoss0,pathBoss2,pathBoss3,pathBoss4};
index = 0;
player = new Image[dataBox.length][0];
for (int i = 0;i<dataBox.length;i++)...{
index += dataBox[i].length;
player[i] = new Image[dataBox[i].length];
}
Init = true;
}
加载过程
public void Load() ... {
this.m = 0;
this.n = this.i;
for(int im = 0;im<dataBox.length;im++)...{
if(n >= dataBox[im].length)...{
if(m<dataBox.length-1)...{
m ++;
}
n -=dataBox[im].length;
}
else...{
break;
}
}
player[m][n]=loadImage(readImage(getStart(dataBox[m],(short) n),dataBox[m][n],pathBox[m]),0,dataBox[m][n]);
memory += (player[m][n].getWidth()*player[m][n].getHeight()*2);
if (this.i < index)...{
this.i ++;
}
else...{
Complete = true;
}
}