Libgdx演员未检测到触摸输入

时间:2015-05-10 18:52:29

标签: java libgdx touch actor

我正在寻找触摸检测。下面显示的代码是我在我的应用中设置一个圆圈所做的。我希望在这个圆圈上检测触摸,而不是在整个纹理周围或整个纹理上。奇怪的是没有检测到触摸,我无处可探测到它 圈子类:

unicode

屏幕类:

public class Circle_Obj extends Actor{
    private Vector2 position;
    private float radius;

    private com.badlogic.gdx.math.Circle circle;
    private Texture texture;

    public Circle_Obj(float x, float y, float radius) {

        position = new Vector2(x,y);
        this.radius = radius;

        circle = new com.badlogic.gdx.math.Circle(x,y,radius);
        texture = new Texture(Gdx.files.internal("texture.png"));

        addListener(new InputListener(){
            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                Gdx.app.log("TOUCHED", " TOUCHED ");
                return true;
            }
        });

    }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        batch.draw(texture,0, 0);
}
}

3 个答案:

答案 0 :(得分:0)

您可以在圆圈类中使用libgdx的触摸检测。只会触及圆圈。

{{1}}

如果您使用了很多圈子,那么将触摸位置作为参数来提高性能会更好。

在圈子类

{{1}}

并在另一个班级

{{1}}

当两个圆圈重叠并且用户触摸重叠区域时,您也可以忽略其中一个触摸的圆圈。

{{1}}

答案 1 :(得分:0)

要检测舞台中添加的actor的触摸,将调用actor的方法hithit detection in the documentation

public Actor hit (float x, float y, boolean touchable) {
    if (touchable && getTouchable() != Touchable.enabled) return null;
    return x >= 0 && x < width && y >= 0 && y < height ? this : null;
}

您尚未为Circle_Obj演员设置尺寸,因此hit将始终返回null。

现在,你的演员是一个圆圈,所以你可能想要覆盖hit,以便它检查给定的坐标是否在圆圈中,而不是检查坐标是否在一个框中的默认实现。演员的大小。

类似的东西:

@Override
public Actor hit (float x, float y, boolean touchable) {
    if (touchable && getTouchable() != Touchable.enabled) return null;
    return (x - position.x)*(x- position.x) + (y - position.y)*(y - position.y) < radius*radius ? this : null;
}

答案 2 :(得分:0)

如果从Actor继承,则需要设置边界,否则不会点击/触摸!         只需设置边界即可匹配Actor包含的纹理。

<![CDATA[]]>