将ArrayList与Objects结合使用

时间:2014-06-03 03:52:40

标签: java processing

当我在屏幕上点击鼠标时,我正在尝试创建自己的粒子效果(简单)。我不认为语言是相关的(但我还在学习)

我的逻辑是否正确:

  

每次单击时,粒子都会添加到ArrayList中以进行迭代,以增加大小,颜色和不透明度

现在,如果我在屏幕上多次点击,这仍然有效,因为每组粒子都可以简单地添加到ArrayList中......

然而,这似乎并不高效,因为当第一个粒子爆炸结束时,ArrayList中不再需要它,不应占用内存

有人可以帮我逻辑吗? 动画制作PNG系列会比动态创建自己的粒子效果更有效吗?

由于

PS - 我没有创建游戏/应用程序......只是尝试我学习的概念

2 个答案:

答案 0 :(得分:1)

您应该删除过期的粒子效果。为此可能更适合使用LinkedList,因为您可以迭代它并在恒定时间内删除任何过期的元素。 ArrayList和LinkedList都实现了List接口,因此如果在代码中使用List,它可以接受。小心避免链表上的索引访问,因为它很慢;尽可能使用迭代器或for-each循环。

Iterator<ParticleBlast> itr = particles.iterator();
while(itr.hasNext())
{
    ParticleBlast next = itr.next();
    if(next.hasExpired()) itr.remove();
}

答案 1 :(得分:1)

让粒子过期怎么样?

class Particle
{
    static final long EXPIRE_TIME = 2000; // 2 seconds

    final long expireTime;

    public Particle ()
    {
        expireTime = System.currentTimeMillis() + EXPIRE_TIME;
    }
}

SortedSet<Particle> particles = new TreeSet<>(new Comparator<Particle>{
    public compare (Particle a, Particle b)
    {
        if(a.expireTime < b.expireTime)
            return -1;
        if(a.expireTime > b.expireTime)
            return 1;
        return a.hashCode() - b.hashCode();
    }
});

然后,您可以使用add方法将粒子添加到'粒子'集。在一个时间间隔内,就像每次更新视图一样,删除已经过期的集合前面的所有粒子(它们的expireTime字段小于System.currentTimeMillis)