#java #graphics
#java #графика
Вопрос:
Я создаю игру, в которой задействовано несколько «шаров», использующих один и тот же класс, у меня все работает так, как я хочу, используя ArrayList, но моя проблема в том, что чем больше шаров я добавляю, тем медленнее они отображаются. Из-за этого игра выглядит так, как будто она идет медленно, и она будет мерцать, я не могу предоставить видео, извините, но я могу предоставить код, который я использую для рисования шаров:
код:
for(int i=0;i<balls.size(); i ){
Ball tmp = (Ball) balls.get(i);
g2d.drawImage(tmp.getImage(), tmp.getX(),tmp.getY(),null);
}
Не могли бы вы привести мне примеры или указания для лучшего способа визуализации шаров?
Спасибо.
Комментарии:
1. Вероятно, это не причина, по которой ваш код работает медленно, но
i<balls.size()
требует вызова методаsize()
для каждой итерации цикла, поскольку компилятор Java не знает, как определяется size(), и не может предположить, что он остается постоянным между вызовами. Инициализация другой переменной, напримерmax
, значениемballs.size()
и использование max в вашемfor
цикле, немного ускорит процесс.
Ответ №1:
Для мерцания вам нужно узнать о двойной буферизации. Если медлительность — это что-то помимо восприятия из-за отсутствия двойной буферизации, вам придется профилировать ее или, возможно, показать еще немного кода.
Комментарии:
1. Хорошо, это потребует значительных изменений в моем текущем коде рендеринга?
2. Не так много. По сути, вместо того, чтобы рисовать непосредственно на переданном вам графическом объекте, вы создаете отдельный объект изображения, рисуете на нем, а затем копируете завершенное изображение на исходную графику. Код рендеринга идентичен. Вы просто рисуете на другой поверхности.
Ответ №2:
Я не уверен в разветвлениях скорости (вероятно, не сильно), но вы должны указывать тип при использовании ArrayList (т.Е. ArrayList<Ball> ) вместо того, чтобы набирать все по мере получения.