【问题标题】:Java Slick2d Image/Texture .equals()Java Slick2d 图像/纹理 .equals()
【发布时间】:2014-07-06 04:36:33
【问题描述】:

我正在创建一个 2d 瓷砖游戏。在这个游戏中,不同类型的瓷砖之间的边界在程序中被绘制(角落瓷砖、边瓷砖等)。像这样的可能的瓷砖数量是有限的。然而,一旦我实现了这一点,帧速率就严重崩溃了。我发现每帧重绘 80-90 个可见图块的行为是问题所在。我试图实现一个缓存系统来缓存唯一的瓦片。除了我无法将生成的图像与图像缓存进行比较之外,该系统可以正常工作。

这是我想做的事情:

//tile object is an Image
if (cache.contains(tile)){
    return cache;
} else {
    cache.add(tile);
    return tile;
}

问题在于两个 Slick2D Image 对象的比较。似乎image.equals() 方法只有在两个图像指针都代表同一个对象时才为真。除了逐像素比较之外,有没有办法快速查看两个不同的 Image 对象是否具有完全相同的数据?

【问题讨论】:

    标签: java image slick2d


    【解决方案1】:

    过去我使用平铺系统的方式是使用 TiledMap 类,然后在平铺编辑器中重绘世界平铺的样子 (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
            }
       }
    }
    

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

    【讨论】:

    • 是的,我最终预先创建了磁贴排列并将它们保存到图像中。
    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多