- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
即使对于常规 View ,手册也非常模糊,甚至没有在 UI 事件概述页面中提及 mGLSurfaceView。
对于初学者来说,所有示例都无法正常工作,因为它们依赖于 View 的 Id(例如 Button button = (Button)findViewById(R.id.corky);
)。我在尝试来回发送 UI 事件时遇到了麻烦。我使用了 shotgun 解决方案并将每个输入事件从 mGLSurfaceView 附加到 Activity ...但我渴望更好的东西。
所以,任何人都足够勇敢地想出一个简单的例子,其中包含一个 Activity、一个 mGLSurfaceView 和一个 Activity onTouch 事件,说明点击相对于屏幕大小的位置? (例如 w=50%,h=50% 完美点击屏幕中央)
public class GlClick extends Activity implements OnTouchListener {
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
mGLSurfaceView = new GLSurfaceView(this);
mGLSurfaceView.setRenderer(new GlRenderer());
setContentView(mGLSurfaceView);
mGLSurfaceView.setOnTouchListener(this);
}
public boolean onTouch(View v, MotionEvent event) {
Log.d(TAG, "example output: click was on 234x211 for a 800x600 screen.")
}
}
class GlRenderer implements Renderer {
// here be lots of messy beginner GL code ...
// ... you'd have wished for dragons.
public void onSurfaceChanged(GL10 gl, int w, int h) {
screenWidth = w;
screenHeight = h;
//TODO: send that to the activity
}
}
最佳答案
我正在开发 android 上的应用程序 ogl
我不使用任何触摸监听器或任何预制的东西,因为迟早你会浪费时间试图弄清楚如何做某事,哈哈
我发现很简单
@Override
public boolean onTouchEvent(MotionEvent event) {
if(sr != null){
/*if(event.getAction() == MotionEvent.ACTION_DOWN){
}else if(event.getAction() == MotionEvent.ACTION_MOVE){
}else if(event.getAction() == MotionEvent.ACTION_CANCEL){
}else if(event.getAction() == MotionEvent.ACTION_UP){*/
GameHandler.onTouchEvent(event);
//}
}
return true;
}
在 GameHandler 中,我首先将触摸从屏幕坐标转换为 glworld 坐标。
在我的 ui 元素中,我有位置和大小,我添加了一个方法“touch(...)”或“isTouched()”
根据我的经验,这非常有效,我建议您尝试一下 ^^
编辑触摸转换
public static void convertTouchToWorldRef(Vect vect){
vect.y = (SceneRenderer.Height-vect.y)/SceneRenderer.Height*SceneRenderer.GAME_DIMENSION_H;
vect.x = (vect.x)/SceneRenderer.Width*SceneRenderer.GAME_DIMENSION_W;
}
;
你需要在y上做height-y(ogl和android有不同的原点位置)
GAME_DIMENSION_* 是 ogl 世界投影平面的大小 (800*600)。
然后是它的基础数学(我不记得英文名字了)但是它的泰勒斯公式 x1/X1 = x2/X2。
编辑:矢量
public class Vector{
private float x = 0;
private float y = 0;
public Vector(float x, float y){
this.x = x;
this.y = y;
}
//add accessors get/set
...
}
您可以浏览互联网以获得更好的示例,例如 http://www.gamedev.net/community/forums/topic.asp?topic_id=302771
关于android - 使用 mGLSurfaceView 处理 UI 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202620/
即使对于常规 View ,手册也非常模糊,甚至没有在 UI 事件概述页面中提及 mGLSurfaceView。 对于初学者来说,所有示例都无法正常工作,因为它们依赖于 View 的 Id(例如 But
我是一名优秀的程序员,十分优秀!