Arrays LIBGDX冲突检测使用2个数组和2个迭代器仅检测第一个对象的冲突
我在互联网上到处搜索了好几个小时,但找不到这个确切问题的例子。如果你没有读到这种恐惧,答案如下 如果使用2个libgdx数组和迭代器检查两种对象类型的边界矩形之间的冲突,可能会遇到以下问题: 第二个迭代器仅检测第一个数组中第一个对象的冲突。这方面的一个例子是: 你有一个敌人目标阵列和一个子弹目标阵列。 子弹正穿过所有敌人,除了第一颗子弹。 但是,当项目符号超出边界时,它们将被删除。 一旦第一个敌人被击中,你只能击中下一个产生的敌人。 您的代码如下所示:Arrays LIBGDX冲突检测使用2个数组和2个迭代器仅检测第一个对象的冲突,arrays,iterator,libgdx,collision,Arrays,Iterator,Libgdx,Collision,我在互联网上到处搜索了好几个小时,但找不到这个确切问题的例子。如果你没有读到这种恐惧,答案如下 如果使用2个libgdx数组和迭代器检查两种对象类型的边界矩形之间的冲突,可能会遇到以下问题: 第二个迭代器仅检测第一个数组中第一个对象的冲突。这方面的一个例子是: 你有一个敌人目标阵列和一个子弹目标阵列。 子弹正穿过所有敌人,除了第一颗子弹。 但是,当项目符号超出边界时,它们将被删除。 一旦第一个敌人被击中,你只能击中下一个产生的敌人。 您的代码如下所示: Iterator<Enemy>
Iterator<Enemy> iterEn = arrayEnemies.getIterator();
Iterator<Bullet> iterBul = arrayBullets.getIterator();
while (iterEn.hasNext){
Enemy e = iterEn.next();
while (iterBul.hasNext(){
Bullet b = iterBul.next();
if (b.isOutOfBounds)iterBul.remove();
if (b.getRectangle().overlaps(e.getRectangle()){
iterBul.remove();
iterEn.remove();
}
}
}
如果声明两个迭代器并希望在另一个迭代器中使用一个迭代器,则会发生以下情况: 这两个迭代器都以其hasNext布尔值为true进行初始化。 敌人迭代器使用第一个敌人开始第一次迭代 对象在敌人数组中。 敌人的迭代器调用第二个迭代器,然后 遍历所有项目符号以检查是否与 敌人的目标。 完成此操作后,项目符号迭代器hasNext被设置为false。 敌方迭代器的下一次迭代调用子弹迭代器 检查碰撞,但hasNext仍然为false,因此它将跳过 正在检查子弹阵列中的任何子弹。 解决方案:在敌人迭代器的迭代循环中初始化子弹迭代器
Iterator<Enemy> iterEn = arrayEnemies.getIterator();
while (iterEn.hasNext){
Enemy e = iterEn.next();
//initialise the bullet iterator each time here
Iterator<Bullet> iterBul = arrayBullets.getIterator();
while (iterBul.hasNext(){
Bullet b = iterBul.next();
if (b.isOutOfBounds)iterBul.remove();
if (b.getRectangle().overlaps(e.getRectangle()){
iterBul.remove();
iterEn.remove();
}
}
}