当用户触摸屏幕时,会创建一个精灵,并且可以将其拖动直到用户抬起他的手指。此时,然后将物理主体附加到精灵上,使其落到屏幕的底部。然而,当精灵与另一个精灵/身体碰撞时,我需要它停止能够移动。如何检查创建的精灵与任何其他身体/精灵(墙和其他任何人)之间的碰撞?
答案 0 :(得分:1)
在AndEngine中实现了相当简单的碰撞检测。请参阅方法collidesWith(IShape pOtherShape)
有人对其进行了改进,使其适用于透明区域,搜索像素完美碰撞检测。
您也可以使用物理引擎,请参阅sensor。
答案 1 :(得分:0)
您正在寻找有关Collision Detection的信息。
根据您的具体情况,实施起来相对简单。 最简单的方法是将所有对象保存在数组/列表中,每次移动它时,都需要计算其当前位置+区域与每个其他对象的比较。这将是非常低效的,但如果你有少量的对象,你可能没问题。
Here是我做的第一个碰撞检测教程。它适用于C,但概念是您正在寻找的。 p>
答案 2 :(得分:0)
虽然计算区域会有效,但我正在处理这么多碰撞,我需要更好的方法。这花了很多时间,但我终于想出了如何使用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();
}
}
}
设置增长的主体以使用户数据“填充”,将固定的主体设置为具有用户数据“stat”。我还有一些其他机构的用户数据“dest”。这样,您可以看到哪两个碰撞并做出相应的反应。如果你不明白,请给我留言。 我没有问题帮助人们了解这类事情。