我正面临着为我正在开发的游戏获取圆圈触点的问题
我试图通过获得以下点来解决这个问题
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;}
我在圈内获得了击中位置,但是在黑点附近的点周围,我只需要靠近圆圈的触点。 是否有人会提出实现这一目标的方法。
答案 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;
}
当然,缺点是,如果这是一个动态物体并且它移动很多,那么你必须不断更新圆圈位置。希望这会有所帮助:)