我正在开发一个小型太空射击游戏。这是学习JAVA的一种有趣的方法,我想确保我做的事情是正确的。这个物体(船)在运行时(激光)产生其他物体。( ->激光器船)。
我用这种方式实现了:
不言自明。但现在:
。
这是释放分配内存的正确方式吗?
激光创造:
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类collisionDetection():
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();
}}}}
发布于 2020-09-04 12:05:00
事实并非如此。
Java是一个垃圾收集系统。你不能“交易”。将一些东西设置为null不会使事物释放。
Java将自动清理任何需要的东西,并且您不需要做任何事情来实现这一点。您唯一需要担心的是编程逻辑。例如,在本例中,您确实需要itr.remove();
调用--这不是要释放一个激光对象,而是要从游戏逻辑中删除激光拍摄。因此,删除空分配行,您将得到以下结果:
if (laser.bounds.overlaps(ship.bounds)){
ship.health -= laser.damage;
itr.remove();
}
https://stackoverflow.com/questions/63740797
复制相似问题