删除对象以释放内存JAVA

问题描述

我正在开发一款小型太空射击游戏。这是学习JAVA的一种有趣的方式,我想确保自己做的正确。 该对象(飞船)在运行时(激光)正在生成其他对象。 (船->激光器)。

我已经这样实现了:

  • 对象飞船绘制在屏幕上。当检测到触摸时,它将创建Laser类的 new 实例,然后将其添加到GameScreen类内部的静态LinkedList激光器中。
  • GameScreen对象负责绘制和更新屏幕上的所有激光,飞船和效果。

自我解释。但是现在:

  • detectCollision()被调用,所有与舰船相交的激光器都从LinkedList激光器中删除。
  • 在游戏结束时(用户退出),我遍历存储在GameScreen.lasers链接列表中的Laser类的所有实例,并将它们全部设置为 null。还将列表设置为空。

这是释放分配的内存的正确方法吗?

激光创建:

abstract class Ship {
if (canShoot()) {
    Laser laser = new Laser(new Rectangle(x,y,width,height)); // bounds
    GameScreen.playerLasers.add(laser);
}}

激光处置:

public class GameScreen {
private void dispose() {
    for (Laser laser : playerLasers) {
        laser.bounds = null;
        laser = null;
    }
    playerLasers = null;
}}

GameScreen类crashDetection():

public class GameScreen {
    private void detectCollision() {
        ListIterator<Laser> itr = playerLasers.listIterator();
        while (itr.hasNext()){
            Laser laser = itr.next();
            if (laser.bounds.overlaps(ship.bounds)){
                ship.health -= laser.damage;
                laser.bounds = null;
                laser = null;
                itr.remove();
}}}}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)