-2

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

4

3 回答 3

1

您正在寻找有关碰撞检测的信息。

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

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

于 2012-06-21T14:40:39.947 回答
1

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

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

于 2012-06-28T12:09:44.407 回答
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();
                }
            }
        }

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

于 2012-07-01T08:07:42.287 回答