我正在寻找触摸检测。下面显示的代码是我在我的应用中设置一个圆圈所做的。我希望在这个圆圈上检测触摸,而不是在整个纹理周围或整个纹理上。奇怪的是没有检测到触摸,我无处可探测到它 圈子类:
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);
}
}
答案 0 :(得分:0)
您可以在圆圈类中使用libgdx的触摸检测。只会触及圆圈。
{{1}}
如果您使用了很多圈子,那么将触摸位置作为参数来提高性能会更好。
在圈子类
中{{1}}
并在另一个班级
{{1}}
当两个圆圈重叠并且用户触摸重叠区域时,您也可以忽略其中一个触摸的圆圈。
{{1}}
答案 1 :(得分:0)
要检测舞台中添加的actor的触摸,将调用actor的方法hit
(hit 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[]]>