игра для Android - как хранить элементы игры, чтобы gc не стрелял - PullRequest
1 голос
/ 07 июня 2011

Я занимаюсь разработкой игры для Android, и у меня есть вопрос о хранении игровых элементов без запуска сборщика мусора.

Моей игре нужна коллекция, в которой игровые элементы хранятся в соответствии с позициями x, y (все игровые элементы имеют x, y, ширину и высоту).Затем коллекция вызывается в каждом кадре для извлечения элементов в соответствии с cameraX, cameraY, шириной и высотой камеры (пользователь может прокручивать игру).

Пример:

 function draw() {
   tmp = collection.getElements(tmp,cameraX,cameraY,cameraWidth,cameraHeight);
     for(int i = 0; i < tmp.size(); i++) {
        tmp.get(i).draw();
     } 
  }

В настоящее время я использую класс Vector для представления элементов коллекции, но gc продолжает срабатывать каждые несколько минут.Я делаю все свои ассигнования заранее.Я также изменил функцию getElements, чтобы принять еще 1 параметр - временный вектор (выделенный заранее), который заполняется элементами, а затем возвращается.

  • С каким классом хранить игровые элементы, чтобы gc не стрелял (я предпочитаю никогда, если это возможно)?
  • я также добавляю элементы в коллекцию во время выполнения, я должен также выделять их заранее?

Спасибо,

С уважением J.

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

Раз в несколько минут не стоит беспокоиться о том, стоит ли сейчас беспокоиться о том, наблюдается ли заметное снижение частоты кадров при его срабатывании? Другой вариант - просто вызвать System.gc (), когда вам удобно.

0 голосов
/ 07 июня 2011
  1. Если у вас есть ссылка на объект, GC не будет собирать их.Поэтому, если вы не создадите объекты (и не отпустите их) во время игры, ваш сборщик мусора никогда не освободит память
  2. Если вам нужно создавать свои элементы заранее, зависит от типа элементов.Если они должны читать данные из файловой системы, вы должны загрузить их раньше в последовательности загрузки / загрузки.Если они просты, вы можете сделать это тогда, когда они вам нужны в первый раз
...