我正在创建一个2d平铺游戏。在这个游戏中,不同类型的瓷砖之间的边界被绘制在程序中(角落瓷砖,侧面瓷砖等)。像这样有可能有限数量的瓷砖。然而,当我实现这一点时,帧速率崩溃得非常糟糕。我发现每帧重绘80-90个可见瓷砖的行为是个问题。我试图实现一个缓存系统来缓存独特的tile。除了我无法将生成的图像与图像缓存进行比较之外,该系统仍可正常工作。
以下是我希望能够做到的事情:
//tile object is an Image
if (cache.contains(tile)){
return cache;
} else {
cache.add(tile);
return tile;
}
问题在于两个Slick2D Image对象的比较。看起来image.equals()
方法只有在两个图像指针都代表同一个对象时才会成立。除了逐像素比较,有没有办法快速查看两个不同的Image对象是否具有完全相同的数据?
答案 0 :(得分:0)
过去我使用tile系统的方法是使用TiledMap类,然后在Tiled Editor(http://www.mapeditor.org)中重新绘制世界图块的样子。这将创建一个.tmx文件,可用于冲突和渲染。
但是,如果您正在寻找程序生成,我最好的建议是创建一个“Tile”类。例如:
public class Tile {
public static int CORNER_TILE = 0;
public static int SIDE_TILE = 1;
public static int CENTRE_TILE = 2;
public int x, y, type;
public Tile(int type, int x, int y) {
this.type = type;
this.x = x;
this.y = y;
}
public void render(Graphics g) {
//Insert rendering code for each different tile type
//For example:
if (this.type == Tile.CENTRE_TILE) {
g.drawImage(Main.someTileImage, x * 32, y * 32);
//Multiply x and y by dimensions of tile
}
}
}
您需要的只是一个二维数组,您可以循环更新每一帧。我知道这不是你要求的,但这些是我使用瓷砖的方式。希望这会有所帮助:)