Java 结合对象理解ArrayList
我正在尝试在屏幕上单击鼠标时创建自己的粒子效果(简单)。我不认为这门语言相关(但我还在学习) 我的逻辑是否正确: 每次单击时,粒子都会添加到ArrayList中,以进行迭代以增加大小、颜色和不透明度 现在,如果我在屏幕上多次单击,这仍然有效,因为每组粒子都将简单地添加到ArrayList 但是,这似乎并不有效,因为当第一次粒子爆炸结束时,ArrayList中不再需要它,并且不应占用内存 有人能帮我解释一下逻辑吗? 动画PNG系列会比动态创建自己的粒子效果更有效吗 谢谢Java 结合对象理解ArrayList,java,processing,Java,Processing,我正在尝试在屏幕上单击鼠标时创建自己的粒子效果(简单)。我不认为这门语言相关(但我还在学习) 我的逻辑是否正确: 每次单击时,粒子都会添加到ArrayList中,以进行迭代以增加大小、颜色和不透明度 现在,如果我在屏幕上多次单击,这仍然有效,因为每组粒子都将简单地添加到ArrayList 但是,这似乎并不有效,因为当第一次粒子爆炸结束时,ArrayList中不再需要它,并且不应占用内存 有人能帮我解释一下逻辑吗? 动画PNG系列会比动态创建自己的粒子效果更有效吗 谢谢 PS-我不是在创建游戏/应
PS-我不是在创建游戏/应用程序…只是在尝试我正在学习的概念你应该删除过期的粒子效果。为此,可能更适合使用LinkedList,因为您可以对其进行迭代并在固定时间内删除任何过期的元素。ArrayList和LinkedList都实现了列表接口,因此如果在代码中使用列表,它可以接受其中任何一个。小心避免链接列表上的索引访问,因为它很慢;尽可能为每个循环使用迭代器
Iterator<ParticleBlast> itr = particles.iterator();
while(itr.hasNext())
{
ParticleBlast next = itr.next();
if(next.hasExpired()) itr.remove();
}
Iterator itr=particles.Iterator();
while(itr.hasNext())
{
刨花板下一个=itr.next();
如果(next.hasExpired())itr.remove();
}
让粒子过期怎么样
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();
}
});
类粒子
{
静态最终长过期时间=2000;//2秒
最后的长过期时间;
公共粒子()
{
expireTime=System.currentTimeMillis()+过期时间;
}
}
SortedSet粒子=新树集(新比较器{
公共比较(粒子a、粒子b)
{
if(a.expireTimeb.到期时间)
返回1;
返回a.hashCode()-b.hashCode();
}
});
然后可以使用add方法将粒子添加到“粒子”集中。每隔一段时间,就像每次更新视图一样,从集合前面移除所有已过期的粒子(其expireTime字段小于System.currentTimeMillis)