Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Как удалить обьект в Java

Я создал выстрел пули:
for (Bullet bullet : bullets) { bullet.x = bullet.x + 10; System.out.println(bullet.x); batch.draw(tbullet, bullet.x, bullet.y); }
Как удалить объект(пулю), когда она вылетает за экран?
Дополнение:
for (Bullet bullet : bullets) { bullet.x = bullet.x + 10; System.out.println(bullet.x); batch.draw(tbullet, bullet.x, bullet.y); if (bullet.x>=500) { tbullet.dispose();// Картинка Освобождаеться bullets.remove(bullet);// Вызывает ошибку } }

Exception in thread "LWJGL Application" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at com.mygdx.game.MyGdxGame.render(MyGdxGame.java:265) at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223) at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)


Ответ

Java - язык с автоматическим управлением памятью. Поэтому явно вручную освободить память, выделенную для объекта, нельзя.
Вы можете удалить объект из коллекции bullets
bullets.remove(bullet);
и тогда, если на него не осталось других ссылок, сборщик мусора когда-нибудь почистит его.

Если пуль много, и они появляются и исчезают очень часто, вы можете захотеть держать конечное количество пуль всегда в памяти в некотором пуле (коллекции) и добавить им поле boolean active. После этого вместо создания новой пули - брать из пула любую неактивную пулю и выставлять ей active = true. Когда пуля должна быть удалена - сбрасывать поле active в false

Комментариев нет:

Отправить комментарий