【问题标题】:How do you check to see if a sprite collides with any other object (Android AndEngine)?如何检查精灵是否与任何其他对象(Android AndEngine)发生碰撞?
【发布时间】:2012-06-20 22:26:02
【问题描述】:

当用户触摸屏幕时,会创建一个 sprite,并且可以拖动它直到用户抬起手指。在这一点上,一个物理体被附加到精灵上,这样它就会落到屏幕的底部。但是,当精灵与另一个精灵/身体碰撞时,我需要它停止移动。如何检查创建的精灵与任何其他主体/精灵(墙壁和任何其他创建的)之间的碰撞?

【问题讨论】:

  • 计算大小,然后看它是否与另一个对象的大小重叠?
  • 我必须设置一个数组来计算每个对象的位置和大小,对吧?

标签: android sprite andengine collision


【解决方案1】:

您正在寻找有关Collision Detection 的信息。

根据您的情况,实施起来相对简单。 最简单的方法是将所有对象保存在一个数组/列表中,每次移动它时,您都需要计算其当前位置 + 面积与其他所有对象。这将非常低效,但如果你有少量的对象,你可能没问题。

Here 是我做的第一个碰撞检测教程。它适用于 C,但概念正是您要寻找的。​​p>

【讨论】:

    【解决方案2】:

    AndEngine 中实现了一个相当简单的碰撞检测。见方法collidesWith(IShape pOtherShape)有人对其进行了改进,使其适用于透明区域,搜索像素完美碰撞检测。

    您还可以使用物理引擎,请参阅sensor

    【讨论】:

    • 这个问题是collidesWith()检测到一个矩形。
    【解决方案3】:

    虽然计算面积会起作用,但我要处理如此多的碰撞,我需要一种更好的方法。花了相当多的时间,但我终于弄清楚了如何使用 ContactListener (这确实是我所追求的。当有人真正需要做的只是解释一下时,为什么这些问题总是被否决一个新手???)无论如何,为了参考可能会看到这个问题的其他人,在您的 ContactListener 中,您可以使用如下代码:

    public void beginContact(Contact contact) {
                if(fillerNum>-1 && contact.getFixtureA().getBody().getUserData()!=null && contact.getFixtureB().getBody().getUserData()!=null){
                    String x1 = (String) contact.getFixtureA().getBody().getUserData();
                    String x2 = (String) contact.getFixtureB().getBody().getUserData();
                    if((x1.equals("fill")&&!x2.equals("dest"))||(x2.equals("fill"))&&!x1.equals("dest")){ //If a filler hits a stationary
                        //Log.e("Contact",x1 + " " + x2); 
                        createStationaryFiller();
                    }
                    if((x1.equals("dest")&&x2.equals("fill"))||(x1.equals("fill")&&x2.equals("dest"))){ //If a destroyer hits a filler
                        destroyFiller();
                    }
                }
            }
    

    设置成长中的实体来“填充”用户数据,设置静止的实体来获取用户数据“统计”。我还有其他一些用户数据为“dest”的机构。这样,您可以看到哪两个发生碰撞并做出相应的反应。不明白的给我留言。 帮助那些不熟悉这种事情的人没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多