Похоже, что Java-игра работает медленно?

#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> ) вместо того, чтобы набирать все по мере получения.