Какую стратегию буферизации я должен использовать для своей 2D-карты прокрутки? - PullRequest
7 голосов
/ 13 августа 2011

Итак, я создаю 2d нисходящую игру на Java.

Я следую инструкциям Java 2D: аппаратное ускорение - часть 2 - стратегии буфера , чтобы воспользоватьсяаппаратного ускорения.

По сути, я думаю следующее:
Я хотел бы иметь возможность легко добавлять дополнительные разделы на карту.Так что я бы предпочел не идти по пути, предложенному в нескольких уроках, которые я видел (у каждой плитки карты есть список смежных окружающих плиток; начиная с центральной плитки, заполняйте экран поиском в ширину).

Вместо этого я хотел бы иметь коллекции плиток размером с экран (скажем, 32x32 для простоты), и у каждого из этих «кусочков» экрана будет список, ссылающийся на каждую смежную коллекцию.Затем я создал бы буфер для текущего экрана и 8 смежных экранов и нарисовал видимую часть в буфере VRAM.

У меня вопрос, будет ли это правильный путь, или он есть?лучший вариант?Я просмотрел довольно много учебных пособий, но все они, кажется, предлагают одинаковые (казалось бы, высокие эксплуатационные расходы) варианты.

Казалось бы, это был бы лучший выбор, поскольку выполнение действий на уровне плитки потребовало бы1024 раза больше списков смежности.Кроме того, причина, по которой я собирался поместить только видимую часть в VRAM, оставляя «текущий» экран и смежные с ним экраны в стандартных буферах, заключалась в том, что я новичок в аппаратном ускорении и не совсем уверен, сколько места допустимо считатьбыть доступным.Поскольку Java в любом случае пытается ускорить стандартные буферы, теоретически это должно быть так же быстро, как помещать каждый в VRAM?

Любые и все предложения приветствуются!

1 Ответ

3 голосов
/ 13 августа 2011

Я не смотрел ни на один из популярных игровых движков на основе плиток , но я бы подумал об использовании паттерна мухи для визуализации только видимых плитокв окне просмотра JScrollPane.JTable является и примером, и полезной реализацией.

Добавление: Одно из преимуществ подхода JTable заключается в разделении модели вида , что позволяет отнести приобретение связанных с плиткой ресурсов к модели.Это облегчает оптимизацию без изменения вида.

Даже без полос прокрутки можно использовать scrollRectToVisible(), расширяя JComponent или соответствующий подкласс.Метод setDoubleBuffered() также может быть полезен.

...