【问题标题】:I have an array of blasts and an array of zombies, how can I efficiently detect collisions?我有一堆爆炸和一堆僵尸,我怎样才能有效地检测碰撞?
【发布时间】:2015-02-21 01:13:57
【问题描述】:

我有一系列爆炸和僵尸,但我正在努力寻找一种有效检测碰撞并移除碰撞的爆炸和僵尸的方法。有什么建议么?

    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();
    }

【问题讨论】:

    标签: libgdx game-physics


    【解决方案1】:

    你需要把另一个迭代器放在另一个迭代器里面,试试这个:

    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&lt;Rectangle&gt; blastIter,但在循环内初始化它,并将blast.x增量移出循环,否则如果有多个爆炸,爆炸的速度会越来越快:)
    【解决方案2】:

    制作嵌套循环,就像你在那里一样,但一个在另一个里面(里面不重要),所以你将拥有这两个列表中的所有对象组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 2015-12-02
      相关资源
      最近更新 更多