如何在Libgdx的图像中检查圆圈的触点?

时间:2014-08-11 13:33:31

标签: android libgdx geometry

我正面临着为我正在开发的游戏获取圆圈触点的问题 circle inside circle

我试图通过获得以下点来解决这个问题

public Actor hit(float x, float y, boolean touchable){   
if(!this.isVisible() || this.getTouchable() == Touchable.disabled)
      return null;

    // Get center-point of bounding circle, also known as the center of the Rect

float centerX = _texture.getRegionWidth() / 2;
    float centerY = _texture.getRegionHeight() / 2;

    // Calculate radius of circle

float radius = (float) (Math.sqrt(centerX * centerX + centerY * centerY))-5f;

// And distance of point from the center of the circle
    float distance = (float) Math.sqrt(((centerX - x) * (centerX - x)) 
               + ((centerY - y) * (centerY - y)));

    // If the distance is less than the circle radius, it's a hit
    if(distance <= radius) return this;

    // Otherwise, it isn't
    return null;}

我在圈内获得了击中位置,但是在黑点附近的点周围,我只需要靠近圆圈的触点。 是否有人会提出实现这一目标的方法。

2 个答案:

答案 0 :(得分:3)

我猜你正在比较当地的矩形坐标(即centerX,centerY)和你正在为这个函数提供的屏幕坐标x,y参数。

所以你可能想从参数x,y中减去rect的x,y位置,所以你的参数是在本地坐标中。

所以: float lLocalX = x-rectX(假设这是屏幕上的x位置) float lLocalY = y-rectY(假设这是屏幕上的y位置)

现在你可以比较它们了!

float distance =(float)Math.sqrt(((centerX - lLocalX)*(centerX - lLocalX))                +((centerY - lLocalY)*(centerY - lLocalY)));

答案 1 :(得分:2)

你的演员可以拥有一个Circle对象:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Circle.html 然后使用circle.contains(float x,float y)函数检查圆是否包含该点。 基本上它看起来像这样:

public Actor hit(float x, float y, boolean touchable){   
      if(!this.isVisible() || this.getTouchable() == Touchable.disabled) 
            return null;

      if (circle.contains(x,y)) return this;

       return null;
}

当然,缺点是,如果这是一个动态物体并且它移动很多,那么你必须不断更新圆圈位置。希望这会有所帮助:)