我最近又开始想着鼓捣游戏开发了。大家知道在游戏开发中经常要处理“碰撞检测”,这是一个非常吃性能的计算过程,我就一直在想有什么办法能够优化“碰撞检测”执行效率。
然后我突然想到在操作手机时,我的手指相对于Android系统不就是一个经典的“碰撞检测”吗?
首先我们来看这样一个场景:屏幕上有N个按钮,我们随意点击其中一个,手机怎么知道我点的是哪一个?
可能有小伙伴会问:这不是很简单吗?因为你点了屏幕啊,屏幕知道你点的是哪个按钮就行了啊。
但是事情不是这样。在冯诺依曼的计算机模型中,我们常说的屏幕被分为显示屏和触摸屏,分别表示输出设备、输入设备。
与一般的输入设备键盘不同,触摸屏只能接收到手指在屏幕上的坐标。在收到坐标信息之后,它将物理信号转化为二进制的数据,并交给操作系统去处理。
具体到Android系统中,它的整个单击事件处理流程是这样的:
1、触摸屏收到坐标
2、将坐标信息转为二进制信息交给Android
3、Android系统将触摸事件再进行一次封装,并交给当前页的Activity
4、activity把触摸事件再传递给PhoneWindow,PhoneWindow再传递给DecorView
5