LibGDX如果2个物体触及,做一些事情

时间:2014-10-12 20:40:51

标签: java object libgdx touch contains

我一直在测试创建一个可以执行某些操作的函数,如果两个对象触摸(如果一个包含或只是触及另一个)。我发现了这个:

public boolean inBounds(float cx, float cy, int size)
    {
        Rectangle rec1 = new Rectangle(x, y, this.size, this.size);
        Rectangle rec2 = new Rectangle(cx, cy, size, size);

            if(rec1.contains(rec2)) return true;

        return false;
    }
    }

所以,这是我的Entity类中的触摸功能。所以,在我在渲染函数中调用的更新函数中,我有:

if (e instanceof Worm && player1.inBounds(e.x, e.y, e.size))  
            {
                entities.remove(i); //remove object from the scene
                i--;
                player1.incScore(); //increase score
            }

这很有效,但是只有当我的角色比那个对象更长时,我才会每次都需要它,不仅仅是因为角色比对象更长。那现在该怎么办?我发现了一个我可以像if (rec1.overlaps(rec2)) return true;一样使用的功能,但现在,它可以工作,是的..但我的对象的纹理不是那么终极(这是对象:http://img24.cz/images/08705660216361901876.png),所以看起来很糟糕。如果对象靠近玩家,它会激活我的功能,我想只有当对象在玩家中时才能拥有它,所以我可以创造更好的纹理,这对我来说真的很难,或者我可以...我不知道我能做什么,所以,请帮助我。 :d

2 个答案:

答案 0 :(得分:0)

确定。

首先。 使用临时矩形,不要每帧都创建一个新的矩形!

您正在检查rectangle.contains(otherRectangle);它告诉你otherRectangle是否在矩形内。 您想检查矩形是否重叠另一个。

private Rectangle tmpRect1=new Rectangle();
private Rectangle tmpRect2=new Rectangle();

在您的方法中

public boolean inBounds(float cx, float cy, int size)
    {
        tmpRect1.set(x, y, this.size, this.size);
        tmpRect2.set(cx, cy, size, size);

        return tmpRect1.overlaps(tmpRect2); // returns true if rectangles are overlapping, and false if not

    }

答案 1 :(得分:0)

是的,但它不能解决我的问题。我的问题是,如果我使用重叠功能,它看起来不真实。因为(看http://img24.cz/images/08705660216361901876.png),你可以看到图像的顶部是干净的,没有我的鱼,我的鱼只在图像的中间,所以它看起来很糟糕,如果玩家在在鱼上,它给了我一个分数(因为它是重叠的(因为非最终的图像))。包含函数更好,因为它看起来很好。所以我想要一个帮助,我怎样才能让它变得更好。