2016-11-18 36 views
0

嗨我已成功呈现OpenlGL ES 2.0中的犹他州茶壶。目前,我正在尝试实施触摸事件,以便每次触摸茶壶时都会发生爆炸。Android OpenGL ES茶壶爆炸实施

我的问题是我应该在Renderer类或GLSurfaceView中实现触摸事件?以及如何让茶壶爆炸。先谢谢你。我是新Android中任何建议高度赞赏

回答

0

关于触摸事件:

您将需要显示目前您有系统/架构。通常你会有一个单独的类来控制场景。在你的情况下,你可能只有一个包含茶壶及其所有值的绘制,移动或爆炸的对象...因此,这个类应该被初始化并由表面视图或其父对象拥有。在这两种情况下,表面视图都可以访问场景。现在,如果我假设渲染器负责绘制,那么表面视图就是渲染器的所有者,并且会调用类似于this.myRenderer.drawScene(this.myScene)的东西,或者如果渲染器对绘制初始化有控制权,则表面视图必须将访问权转发给this.myRenderer.setScene(this.myScene)。所以最后,这两个类都可以访问这个场景,并且可以访问茶壶对象。

现在要处理触摸事件,您需要检查什么是您可以截取触摸事件的最近位置。如果表面视图可以拦截这些调用,然后在那里实现。如果没有,我相信表面视图的所有者可以在这种情况下,所有者将调用this.mySurfaceView.handleTouchEvent(touch)

现在表面视图可以选择做一些检查,看看锅是否被击中并开始爆炸过程。这可能就像在茶壶上调用方法一样简单,如this.myScene.teapotObject.explode()

关于爆炸本身:

有关于如何爆炸的对象,通常他们都不很多方面都容易。最小值很可能是有一个系统,你的顶点缓冲区将被拆分成更小的块,其中每个块在爆炸时被动画地放错位置。

即使创建一个动画也许是一个艰难的过程。一种方法是创建一个插值,其中动画开始时间为startTimeStamp,其duration,对象开始位置startPosition和对象结束位置endPosition。然后通过currentPosition = startPosition + (endPosition -startPosition)*(startTimeStamp-currentTimeStamp)/duration检索当前位置。另一种方法是实现物体在每个帧上移动的物体。在这种情况下,您可以定义对象speed,然后在每个帧上您将调用teapot.chunk.move(1.0/60.0),然后执行this.position += this.speed*dt。然后,您可以添加重力来操纵速度或碰撞...

+0

非常感谢@Matic。 –