Изображение / текстура Java Slick2d.equals()

Я создаю игру 2D плитки. В этой игре в программе нарисованы границы между различными типами плиток (угловые плитки, боковые плитки и т. Д.). Существует конечное число возможных плиток, подобных этому. Однако, как только я это реализовал, частота кадров сильно упала. Я понял, что проблема перерисовки 80-90 видимых плиток в каждом кадре была проблемой. Я попытался реализовать кеш-систему для кеширования уникальных плиток. Эта система работает за исключением того факта, что я не могу сравнить сгенерированное изображение с кэшем изображений.

Вот что я хотел бы сделать:

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

Проблема заключается в сравнении двух объектов Slick2D Image. Кажется, что image.equals() Метод будет истинным, только если оба указателя изображения представляют один и тот же объект. Кроме как попиксельного сравнения, есть ли способ быстро увидеть, имеют ли два разных объекта изображения одинаковые данные?

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

Все, что вам тогда понадобится, - это двумерный массив плиток, который вы просматриваете для обновления каждого кадра. Я знаю, что это не совсем то, что вы просили, но это мои способы работы с плитками. Надеюсь это поможет:)

Другие вопросы по тегам