Java Slick2d图像/纹理.equals()

时间:2014-05-17 23:20:36

标签: java image slick2d

我正在创建一个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对象是否具有完全相同的数据?

1 个答案:

答案 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
        }
   }
}

您需要的只是一个二维数组,您可以循环更新每一帧。我知道这不是你要求的,但这些是我使用瓷砖的方式。希望这会有所帮助:)