java中的图形慢映射
我正在用java做一个游戏,是一个rpg,但是,只有用地图的游戏才慢。 这张地图是制作的因此,在TileMap编辑器中,读取并加载到ArrayList中的XML。我的电脑是双核3.0,4GB内存,1GB视频。 执行渲染的步骤如下所示:
//method of tileset class
public void loadTileset(){
positions = new int[1 + tilesX * tilesY][2];
int yy = 0;
int xx = 0;
int index = 0;
// save the initial x and y point of each tile in an array named positions
// positions[tileNumber] [0] - X position
// positions[tileNumber] [1] - Y position
for(int i = 1 ; i < positions.length; i++){
if(index == tilesX ){
yy += tileHeight;
xx = 0;
index = 0;
}
positions[i][0] = xx;
positions[i][1] = yy;
xx += tileWidth;
index++;
}
}
//method of map class
public void draw(Graphics2D screen){
//x and y position of each tile on the screen
int x = 0; int y = 0;
for(int j = 0; j < 20 ; j++){
for(int i = initialTile ; i < initialTile + quantTiles ; i++){
int tile = map[j][i];
if(tile != 0){
screen.drawImage(tileSet.getTileImage().getSubimage(tileSet.getTileX(tile), tileSet.getTileY(tile),tileSet.getTileWidth(), tileSet.getTileHeight()),x,y,null);
}
x += tileSet.getTileWidth();
}
x = 0;
y += tileSet.getTileHeight();
}
}
我做错什么了吗? 注意:我是论坛的新手,更糟糕的是我不太懂英语,所以请原谅我的错误
# 1 楼答案
首先,您不应该在每次调用期间为磁贴创建子图像。严格地说,对于要绘制的图像,您应该完全不要调用
getSubimage
:这将使图像处于“非托管”状态,这可能会使渲染性能降低一个数量级。对于不想渲染的图像,您应该只调用getSubimage
,例如,当您最初为瓷砖创建单个图像时显然你已经有了一个
TileSet
类。你可以在这个类中添加一些功能,这样你就可以直接访问瓷砖的图像了您当前的代码如下所示:
你可以把它改成这样:
这里建议的
getTileImage(int tile)
方法可以获得内部存储的磁贴我将从我的脑海中勾勒出几行代码,您可能能够将其转移到
TileSet
类中: