Лучший вариант производительности для рисования из листа спрайта с использованием Java Swing - PullRequest
0 голосов
/ 04 марта 2010

Я создаю графическую игру в стиле roguelike, используя Java. В игре я рисую двумерный массив объектов Tile на JPanel. Эти объекты плитки представляют землю. У меня есть спрайт .bmp, который содержит все текстуры, которые я хочу использовать для рисования. Каждый раз, когда игрок движется, плитки, которые видны игроку, должны быть перерисованы.

Мой вопрос - вопрос производительности. Я реализовал это в прошлом, где у меня есть Tile, расширяющие JPanel, и каждый Tile просто отображает соответствующий сегмент листа спрайта, используя bufferedImage.getSubImage (), в то время как родительский JPanel просто вызывает paint () для всех Tiles 2-й массив. Это хорошо работало на небольших картах 30x20 в предыдущем проекте, но я не уверен, что это будет работать в текущей игре.

Должен ли я использовать тот же подход или есть другое возможное решение, которое ускорит время прорисовки? Должен ли класс Tile расширить какой-либо другой компонент Swing или AWT, такой как BufferedImage, или это не даст эффекта?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 марта 2010

Эта игра на основе тайлов хорошо играет на больших экранах: 1900x1200 пикселей, 60x36 тайлов. Масштабирование изображений до конечного прямоугольника, казалось, потребляло большую часть бюджета рендеринга. Здесь больше дискуссий здесь .

2 голосов
/ 04 марта 2010

Вы можете использовать один компонент для доски (вместо одного на плитку), чтобы он рисовал каждую плитку. Отдельный модуль рендеринга может обрабатывать отдельные плитки, чтобы сделать решение более модульным. Это аналогичный подход, используемый JTable и рендерингом его ячеек.

Не уверен в производительности getSubImage (), возможно, стоит извлечь (и кэшировать) отдельные изображения заранее.

Также обратите внимание только на перекрашивание ячеек, которые меняются (если вы этого еще не сделали).

...