如何使许多类都可以访问 Arraylist?
Posted
技术标签:
【中文标题】如何使许多类都可以访问 Arraylist?【英文标题】:How do I make an Arraylist accessible to many classes? 【发布时间】:2011-09-08 11:08:25 【问题描述】:我正在制作一款垂直射击游戏,但在碰撞检测方面遇到了问题。通过 Rectangle 方法“intersect”检测碰撞,但为了跟踪可能发生碰撞的所有内容,我需要 Arraylists 来跟踪所有子弹和敌舰。 Enemy 和 Player 类都产生 Bullets(它们也有自己的类),所以我想在我的 GameView 类中有 2 个不同的 Arraylist(它控制游戏图形并希望在这里完成后发生碰撞)。
在生成时允许将子弹添加到其各自的 ArrayList 的最有效方法是什么?
子弹类:
public class Bullet extends Location
private Fights bulletOwner;
private int damage;
private int velocity;
public Bullet(Fights owner, int dmg, Rectangle loca)
super(loca);
bulletOwner = owner;
damage = dmg;
public Fights getOwner()return bulletOwner;
public int getDamage()return damage;
public int getVelocity()return velocity;
位置类
import java.awt.Rectangle;
public class Location
protected Rectangle loc;
public Location (Rectangle location)
loc = location;
public Rectangle getLocation()
return loc;
public void updateLocation(Rectangle location)
loc = location;
【问题讨论】:
使用多线程时要小心。数组列表的并行修改可能会导致奇怪的异常(对于 i : list.size())-> 越界,因为其他一些线程刚刚删除了一个元素并且大小已经改变。 Collections.synchronizedList 或者 CopyOnWriteArrayList 可能是更好的选择。 【参考方案1】:就像 Marcelo 所说的,GameState 类是个好主意。我要补充一点,使 GameState 类实现单例模式将提高安全性并减少列表的容易出错的全球化。 (会将此作为对其他答案的评论,但我还不能评论,抱歉。)
另外,由于您的问题是关于生成子弹对象的效率,请查看原型和工厂模式。
【讨论】:
【参考方案2】:您可以拥有一个包含位置数组列表的 GameState 类,并将 GameState 实例作为参数传递给 Location 派生类的构造函数。
【讨论】:
以上是关于如何使许多类都可以访问 Arraylist?的主要内容,如果未能解决你的问题,请参考以下文章