gpt4 book ai didi

android - 如何检测android中某个渲染器区域内的触摸事件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:27 26 4
gpt4 key购买 nike

在 android 中,我采用了一个旋转球体示例 given here .它创建了一个显示旋转球体(地球)的简单应用程序。

现在,如果在手机显示屏上按下旋转球体,我想做点什么。我不想对旋转球体外部的触摸事件使用react。到目前为止,这是我通过使用 GLSurfaceView 的派生版本所做的尝试:

public class MyGLSurfaceView extends GLSurfaceView {



MyGLSurfaceView(Context context) {
super(context);
}

public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
Log.d("onTouchEvent",String.format("keyCode: %d coords: %d %d", event.getActionMasked(), x, y));

Renderer renderer = this.Renderer.getRenderer(); // ERROR
return super.onTouchEvent(event);
}

}

如果没有 ERROR 行,这段代码就可以工作,当我按下显示屏时,我得到了 x/y 坐标。

但是,为了评估事件是否在球体,我的方法是获取具有 Sphere 对象的渲染器以确定 x/y坐标在球体内。

但是 ERROR 行不起作用,我收到一条错误消息

Error:(26, 56) error: cannot find symbol method getRenderer()

我该如何解决这个错误;还是有更理智的方法来自动查明事件是否在 Sphere-graphics-object 上?

也许更改构造函数并将渲染器实例也传递给 MyGLSurfaceView 是个好主意?附录:这个想法似乎行不通。我收到一个我不明白的构造函数错误...

最佳答案

您的问题比检测触摸事件要复杂得多。渲染器不仅拥有球体对象,它还拥有整个 OpenGL ES 内容。因此,即使在检测到触摸事件之后,您仍需要将屏幕 2D 坐标转换为 3D 射线并检查它是否与球体相交。这称为光线转换Here是光线转换算法的一个很好的解释。还有一个 good video tutorial用于实现光线转换 Java。

此外,您还需要按照您和@satm12 的建议在 GLSurfaceView 的构造函数中传递渲染器。

关于android - 如何检测android中某个渲染器区域内的触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41346942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com