java - libgdx - 检查 body 是否被触摸

标签 java android libgdx touch box2d

我在屏幕周围有一些物体(Ball[] balls),我想在用户触摸它们时删除它们。

此外,我有一个 Image 作为主体的 userData。

我不想对所有Image做一个函数,因为球必须按顺序删除。

检测 body 是否被触摸的最佳方法是什么?

最佳答案

我知道至少有两种方法可以用来完成此任务。

方法一: 如果您使用的是 Box2D。

在你的 touchDown 函数中你可以有这样的东西:

    Vector3 point;
    Body bodyThatWasHit;

    @Override
    public boolean touchDown (int x, int y, int pointer, int newParam) {

        point.set(x, y, 0); // Translate to world coordinates.

        // Ask the world for bodies within the bounding box.
        bodyThatWasHit = null;
        world.QueryAABB(callback, point.x - someOffset, point.y - someOffset, point.x + someOffset, point.y + someOffset);

        if(bodyThatWasHit != null) {
            // Do something with the body
        }

        return false;
    }

QueryAABB 函数中的 QueryCallback 可以像这样重写:

QueryCallback callback = new QueryCallback() {
    @Override
    public boolean reportFixture (Fixture fixture) {
        if (fixture.testPoint(point.x, point.y)) {
            bodyThatWasHit = fixture.getBody();
            return false;
        } else
            return true;
    }
};

因此,总而言之,您使用世界对象的函数 QueryAABB 来检查某个位置上的夹具。然后我们覆盖回调以从 QueryCallback 中的 reportFixture 函数获取主体。

如果你想看这个方法的实现,你可以看看这个: https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/Box2DTest.java

方法二:

如果您使用的是 Scene2D 或者您的对象以某种方式扩展了 Actor 并且可以使用 clickListener。

如果您使用的是 Scene2D 和 Actor 类,则可以将 clickListener 添加到 Ball 对象或图像。

private void addClickListener() {
    this.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            wasTouched(); // Call a function in the Ball/Image object.
        }
    });
}

关于java - libgdx - 检查 body 是否被触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31764270/

相关文章:

java - 针对 iOS 开发者的 Android 指南提示?

java - 为什么当通过 JNI 在 Java 代码中运行 EGL 函数时,我对 EGL 函数的调用会发生变化?

java - 从未使用过 Onpostexecute 方法

android - 使用循环将按钮添加到android布局

Libgdx 基于特定颜色混合纹理?

libgdx - 在 libgdx 中玩游戏时如何唤醒屏幕?

java - LibGDX - Camera.update() 调用不执行任何操作

java - 如何在 Java 中对 XML 元素进行排序?

java - 当edittext不为空时如何自动按回车键?

java - 为树中的叶子分配不同的值