我一直在Android上探索Nim Game。球員們要從堆中取物。我使用openGLES繪製對象和堆。我卡在哪裏是如何「採取」。
由於official dev guide 上顯示的樣本,我可以覆蓋onTouchEvent
方法中extends GLSurfaceView
用於交互的類。但是,我怎樣才能知道物體在哪裏被繪製?或者在我觸摸的座標處是否有任何物體?
任何想法?
Thx提前!openGLES中的觸摸交互
1
A
回答
1
如果我正確理解你的問題,這聽起來像你想做一些簡單的碰撞檢測,看看你的觸摸點是否在堆中的對象之一。您可以在觸點座標和用於繪製對象的中心座標之間進行一些基本的數學運算。
例如,假設你的對象是矩形,這將是總體思路:
boolean detectCollision(Object object, TouchPoint touch) {
return object.x - object.width/2 <= touch.x &&
object.x + object.width/2 >= touch.x &&
object.y - object.height/2 <= touch.y &&
object.y + object.height/2 >= touch y;
}
然後,您可以通過所有的堆對象的迭代,如果這其中任何返回true,則您知道您的接觸點位於該對象的內部,並且可以繼續調用您需要調用的任何接口。
請記住,觸摸座標系統給你的將是屏幕座標,所以你必須考慮到屏幕座標系統和你用視錐體定義的座標系統之間的任何差異。
1
public class Main extends Activity implements OnTouchListener {
public boolean onTouch(View v, MotionEvent event) {
synchronized (this) {
if (!_isPaused) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
_touchedX = event.getX();
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
float touchedX = event.getX();
float dx = Math.abs(_touchedX - touchedX);
_dxLowPassed = lowPass(dx, _dxLowPassed);
switch (_screenUsage) {
case HALF_SCREEN:
if (touchedX < _width/2) {
if(touchedX < _touchedX) {
_zAngle = (2 * _dxLowPassed/_width) * TOUCH_SENSITIVITY * ANGLE_SPAN;
_zAngleLowPassed = lowPass(_zAngle, _zAngleLowPassed);
GLES20Renderer._zAngle = GLES20Renderer._zAngle + _zAngleLowPassed;
}
} else {
if(touchedX > _touchedX) {
_zAngle = (2 * _dxLowPassed/_width) * TOUCH_SENSITIVITY * ANGLE_SPAN;
_zAngleLowPassed = lowPass(_zAngle, _zAngleLowPassed);
GLES20Renderer._zAngle = GLES20Renderer._zAngle - _zAngleLowPassed;
}
}
Log.d("TOUCH", new Float(_zAngleLowPassed).toString());
break;
相關問題
- 1. 在UIScrollView中觸摸交互
- 2. 檢測觸摸哪一側觸摸在iphone中的openGLES 3dbox
- 3. bing地圖觸摸polygone交互
- 4. 如何檢測用戶在Android中的觸摸交互?
- 5. 如何在Windows 8中的觸摸交互後顯示指針
- 6. 在Android中繪製觸摸交互式圖表
- 7. 在GUI交互中使用多點觸摸輸入?
- 8. 如何在Core Plot中啓用觸摸交互?
- 9. 用戶觸摸的3D模型的交互式動畫
- 10. Microsoft Surface設備上的Firefox的交互性和觸摸功能?
- 11. 如何自定義的傳單觸摸交互映射
- 12. iPhone SDK - 的UIButton上一個UIScrollView觸摸交互
- 13. 在Android上製作交互式觸摸對象
- 14. 如何顯示UIElement,但沒有UI交互(觸摸,點擊,...)
- 15. 不允許在某些視圖上進行觸摸交互?
- 16. 如何檢測iOS UIViewController是否與交互或觸摸
- 17. 動畫時禁用所有觸摸屏交互
- 18. 如何爲android創建觸摸交互式圖表
- 19. javascript等效於'mouseleave'的觸摸互動
- 20. 觸摸iPhone/iPod/iPad交易
- 21. OpenGLES添加用戶互動
- 22. 在UIWebView上檢測觸摸,但忽略交互式元素上的輕掃或觸摸(鏈接或onclick)
- 23. ContentControl中嵌入的交互觸發器
- 24. 觸摸UIButton觸摸
- 25. 在iPhone的觸摸動畫UIButton交換?
- 26. 觸摸表單忽略提交的值
- 27. 可可觸摸 - 在UIImageView中觸摸
- 28. Scrolllable MultiLine TextView在滾動視圖(涉及的沒有觸摸交互)
- 29. 如何處理用戶界面元素的全屏觸摸交互
- 30. 禁用觸摸但不是所有用戶在UITextField上的交互
THX,棘手的事情是我要如何爲「記憶」中的所有對象的座標提供的對象的數量是由用戶 – manuzhang
設置很難不知道你的代碼的細節,只是說你有沒有嘗試將對象存儲在列表中?這樣用戶想創建多少個對象並不重要,然後您可以遍歷該列表並拖動每個對象的x和y座標 – alexc
Yeah,ArrayList – manuzhang