高分请教JAVA速度问题!
我想做一个游戏的地图编辑器,我的思想是把一个大图,用bufferedimage切成小图,然后,存到bufferedimage的数组里,然后,这个地图有放大和缩小功能,我的地图元素块是16x16,地图尺寸是64x64,然后我的地图有3层,我的地图块有500块,所以我的内存bufferimage[500],结果我运行了,内存虽然不占很多,CPU非常的耗资源,因为我放大显示后,就出现CPU资源达到90%多,我画图的放大是
g.drawImage(buf[i],0,0,buf[i].getWidht()*2,buf[i].getHeight()*2,null);一放大就出问题
我是把小的buf[i]图片画到一个大的宽800*600的大图片buf上了,结果,一放大就慢!
这个问题怎么解决啊!
问题点数:200、回复次数:7Top
1 楼programer23(亮子)回复于 2006-06-01 17:51:20 得分 0
dingTop
2 楼LoveVV99(LoveVV)回复于 2006-06-01 18:01:53 得分 0
那你就切分后先放大,再贴图,只是这样子内存消耗就变16倍了。呵呵。
你用java2D吗?Top
3 楼LoveVV99(LoveVV)回复于 2006-06-01 18:12:15 得分 0
把Graphics转换成Graphics2D,再drawimage,如果硬件支持加速的话,会加速很多。
还有就是采取一定的策略来重画,尽量少的重画,只花那些被修改过的部分,其他的部分不要动。比如只重画人物;或者是2D地图并且按格子移动时,将所有的图片保存下来,左移一格,然后把最左边的一排格子重画就好了,这样子可以极大减少运算量。
其他的就不知道怎么办了。
Top
4 楼programer23(亮子)回复于 2006-06-01 18:36:40 得分 0
我的方法是BufferedImage buf ;//图象缓冲区域
Graphics2D g2 = buf.getGraphics();
BufferedImage [50] bi;//那些小的地图块,地图元素,需要贴到buf上的.
void paint(Graphics g)
{
for(int i=0;i<map.高;i++)
{
for(int j=0;j<宽;j++)
g2.drawImage(bi[map[i][j],j*w,i*h,null);
}
g.drawImage(buf,0,0,buf.宽度*2,buf.高度*2,null);//这个是放大的
}
Top
5 楼programer23(亮子)回复于 2006-06-01 18:37:06 得分 0
因为,放大缩小是编辑者来操作的Top
6 楼programer23(亮子)回复于 2006-06-02 13:47:38 得分 0
dTop
7 楼LoveVV99(LoveVV)回复于 2006-06-02 15:12:25 得分 0
没办法,那个缩放操作本来就比较费时间。不过用了java2d后应该会有硬件支持的,不知道为什么你那个那么慢。
你那个地图重复程度高吗?如果重复程度比较高,就把当前屏幕上有的那些图片每种一个放大,然后贴图,这样子的话假设有100个相同的A图片,那么就只需要做一次缩放的运算了。还有就是在移动的时候按照我上面说的那种整体移动的办法。Top




