理论教育 优化触发屏幕图形触摸器的方法

优化触发屏幕图形触摸器的方法

时间:2023-06-19 理论教育 版权反馈
【摘要】:在Android模拟器中,当用鼠标单击一次模拟器屏幕然后释放后,会先触发ACTION_DOWN,然后ACTION_UP。如果是在屏幕上移动那么会触发ACTION_MOVE的动作。当我们的用户在玩游戏的时候,尤其是角色扮演这种类型的游戏,肯定需要会长时间的去触屏、按屏幕上的虚拟按键。游戏的过程中ACTION_MOVE这个事件会被Android一直响应。具体原因有如下两点:第一点:因为Android系统对于触屏事件很敏感。当我们的手指触摸到手机屏幕上之后,感觉静止没动,其实手指在不停的微颤抖震动。

优化触发屏幕图形触摸器的方法

在Android模拟器中,当用鼠标单击一次模拟器屏幕然后释放后,会先触发ACTION_DOWN,然后ACTION_UP。如果是在屏幕上移动那么会触发ACTION_MOVE的动作。但是这只是模拟器的效果,接下来看一下真机与模拟器的区别。

当我们的用户在玩游戏的时候,尤其是角色扮演(RPG)这种类型的游戏,肯定需要会长时间的去触屏、按屏幕上的虚拟按键。游戏的过程中ACTION_MOVE这个事件会被Android一直响应。

为什么会一直响应ACTION_MOVE这个动作?如果用户没有移动手指而是静止不动也会一直响应吗?具体原因有如下两点:

第一点:因为Android系统对于触屏事件很敏感。

第二点:虽然我们的手指感觉是静止没有移动,其实事实不是如此。当我们的手指触摸到手机屏幕上之后,感觉静止没动,其实手指在不停的微颤抖震动。对于此,读者可以具体尝试。(www.daowen.com)

开始具体分析,如果ACTION_MOVE事件在游戏时间内一直被Android不停的响应并处理,无疑对系统增加了不少的负担。比如我们项目线程绘图时间每次用了100ms,那么当手指触摸屏幕,这短暂的0.1秒内大概会产生10个左右的MotionEvent,并且系统会尽可能快的把这些event发给监听线程,这样在这一段时间内CPU就会忙于处理onTouchEvent,严重的话可能造成画面卡顿。

那么我们其实根本用不着按键响应这么多次,而是需要在我们每次绘图后,或者绘图前接受一次用户按键即可,这样能让帧率不至于下降的太厉害。我们需要控制这个时间让它慢下来,随着我们的绘图时间一起来合作,这样就能减不少系统线程的负担。

也可能有的读者会问为什么不用sleep()的方法。如果只是想让线程休眠指定时间,可以用sleep()函数,但是这个方法没有资源锁的限制。而Object的wait()和notify()方法通常用在时间不定的条件限制等待,并且必须写在同步代码块中,所以也不可取。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈