在android我已經採取了旋轉球體的例子given here。它創建了一個顯示旋轉球體(地球)的簡單應用程序。如何檢測android中某個Renderer區域內的觸摸事件?
現在,我想要做的事情,如果在手機顯示屏上按下旋轉的球體。我不想對旋轉球體的以外的觸摸事件作出反應。以下是我迄今爲止嘗試,通過使用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);
}
}
沒有錯誤行此代碼的工作,當我按下顯示我得到的X/Y座標。
然而,爲了評估該事件是內球,我的做法是讓它具有Sphere
對象,以確定是否X/Y座標在範圍內的渲染器。
但錯誤行不行,我得到一個錯誤說
Error:(26, 56) error: cannot find symbol method getRenderer()
我怎樣才能解決這個錯誤;或者如果事件是在Sphere
-graphics-object中,是否有更自理的方法來自動找出?
也許這是一個好主意,更改構造函數並將渲染器實例傳遞給MyGLSurfaceView
以及?附錄:這個想法似乎不起作用。我得到一個構造函數的錯誤,我不明白...
感謝您的建議,但有一個小代碼示例,我認爲我完全失去了。 「射線投射」是什麼意思? – Alex
我添加了SurfaceView代碼。 光線投射是一種檢查是否通過使用視圖矩陣創建從某個點(在此情況下從具有帳戶的相機到發生觸摸事件的位置)發出的光線來「擊中」對象的方法。然後檢查光線是否與任何物體相交。網上有很多在線教程。 – satm12