Изображение / текстура 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
}
}
}
Все, что вам тогда понадобится, - это двумерный массив плиток, который вы просматриваете для обновления каждого кадра. Я знаю, что это не совсем то, что вы просили, но это мои способы работы с плитками. Надеюсь это поможет:)