如何检查精灵是否与任何其他对象(Android和Engine)发生碰撞?

如何检查精灵是否与任何其他对象(Android和Engine)发生碰撞?,android,sprite,andengine,collision,Android,Sprite,Andengine,Collision,当用户触摸屏幕时,会创建一个精灵,并可以拖动精灵直到用户抬起手指。在这一点上,一个物理体被连接到精灵上,这样它就会落到屏幕的底部。但是,当精灵与另一个精灵/身体碰撞时,我需要它停止移动。如何检查创建的精灵与任何其他实体/精灵(墙和任何其他创建的实体/精灵)之间的碰撞?您正在查找有关的信息 根据您的情况,实现起来相对简单。 最简单的方法是将所有对象保存在一个数组/列表中,每次移动它时,都需要计算其当前位置+面积与其他对象的比值。这将是非常低效的,但如果您有少量的对象,您可能还可以 这是我做的第一个

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

您正在查找有关的信息

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


这是我做的第一个碰撞检测教程。它适用于C语言,但概念正是您所需要的。

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


你也可以使用物理引擎,请参见。

虽然计算面积是可行的,但我处理的碰撞太多了,需要一种更好的方法。这花了我不少时间,但我终于找到了如何使用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”。通过这种方式,您可以看到哪两个碰撞并做出相应的反应。如果你不明白,请给我留言。我可以帮助不熟悉这种东西的人。

计算大小,然后看看它是否与另一个对象的大小重叠?我必须设置一个数组来计算每个对象的位置和大小,对吗?问题是CollizeSwith()检测到一个矩形。