当我在屏幕上点击鼠标时,我正在尝试创建自己的粒子效果(简单)。我不认为语言是相关的(但我还在学习)
我的逻辑是否正确:
每次单击时,粒子都会添加到ArrayList中以进行迭代,以增加大小,颜色和不透明度
现在,如果我在屏幕上多次点击,这仍然有效,因为每组粒子都可以简单地添加到ArrayList中......
然而,这似乎并不高效,因为当第一个粒子爆炸结束时,ArrayList中不再需要它,不应占用内存
有人可以帮我逻辑吗? 动画制作PNG系列会比动态创建自己的粒子效果更有效吗?
由于
PS - 我没有创建游戏/应用程序......只是尝试我学习的概念
答案 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)