我有一系列爆炸和一系列僵尸,我怎样才能有效地检测碰撞?
I have an array of blasts and an array of zombies, how can I efficiently detect collisions?
我有一组爆炸和一组僵尸,但我正在努力寻找一种方法来有效地检测碰撞并移除爆炸和发生碰撞的僵尸。有什么建议么?
Iterator<Rectangle> blastIter = blasts.iterator();
while(blastIter.hasNext()) {
Rectangle blast = blastIter.next();
blast.x += 200 * Gdx.graphics.getDeltaTime();
if(blast.x + 16 > 800) blastIter.remove();
}
Iterator<Rectangle> zombieIter = zombies.iterator();
while(zombieIter.hasNext()) {
Rectangle zombie = zombieIter.next();
zombie.x -= 150 * Gdx.graphics.getDeltaTime();
//if(zombie.overlaps(blast)) zombieIter.remove();
}
制作嵌套循环,就像你在那里一样,但一个在另一个里面(在里面哪个不重要),所以你将拥有这 2 个列表中对象的所有组合。
你需要把另一个迭代器放在另一个迭代器里面,试试这个:
Iterator<Rectangle> zombieIter = zombies.iterator();
while(zombieIter.hasNext()) {
Rectangle zombie = zombieIter.next();
zombie.x -= 150 * Gdx.graphics.getDeltaTime();
Iterator<Rectangle> blastIter = blasts.iterator();
while(blastIter.hasNext()) {
Rectangle blast = blastIter.next();
blast.x += 200 * Gdx.graphics.getDeltaTime();
if(blast.x + 16 > 800) blastIter.remove();
if(zombie.overlaps(blast)) zombieIter.remove();
}
}
我有一组爆炸和一组僵尸,但我正在努力寻找一种方法来有效地检测碰撞并移除爆炸和发生碰撞的僵尸。有什么建议么?
Iterator<Rectangle> blastIter = blasts.iterator();
while(blastIter.hasNext()) {
Rectangle blast = blastIter.next();
blast.x += 200 * Gdx.graphics.getDeltaTime();
if(blast.x + 16 > 800) blastIter.remove();
}
Iterator<Rectangle> zombieIter = zombies.iterator();
while(zombieIter.hasNext()) {
Rectangle zombie = zombieIter.next();
zombie.x -= 150 * Gdx.graphics.getDeltaTime();
//if(zombie.overlaps(blast)) zombieIter.remove();
}
制作嵌套循环,就像你在那里一样,但一个在另一个里面(在里面哪个不重要),所以你将拥有这 2 个列表中对象的所有组合。
你需要把另一个迭代器放在另一个迭代器里面,试试这个:
Iterator<Rectangle> zombieIter = zombies.iterator();
while(zombieIter.hasNext()) {
Rectangle zombie = zombieIter.next();
zombie.x -= 150 * Gdx.graphics.getDeltaTime();
Iterator<Rectangle> blastIter = blasts.iterator();
while(blastIter.hasNext()) {
Rectangle blast = blastIter.next();
blast.x += 200 * Gdx.graphics.getDeltaTime();
if(blast.x + 16 > 800) blastIter.remove();
if(zombie.overlaps(blast)) zombieIter.remove();
}
}