输入 - ReiKohaku/Sonolus-wiki-zh_cn GitHub Wiki

输入

输入相关的话题。

输入的集中处理

从操作系统接收的输入可以在帧间隔中的任何一个时间发生,不可能立即进行处理。因此,所有的输入将会放入一个集合中,在下一帧中进行处理。 集中输入时,所有的单个的触摸事件都会被合并在一起。

因此,在处理输入时,必须记住以下几点:

单个的触摸可能同时具有开始和结束

如果用户触摸的物理速度足够快,或是帧速率意外下降时,用户有可能会在同一帧内产生一个新的触摸并放开它。

输入发生在过去

因为它们是从上一帧开始合并的。 在判断用户输入时,重要的一点是尽可能使用系统时间戳,而不是当前帧时间。

正确使用st和t

触摸的st是系统报告的触摸开始的时间。它是用户触摸开始的时间的准确值。

触摸的t是系统报告的触摸事件的时间。 如果ended标识为真,它会是用户松开触摸时间的准确表示;否则,它是不可靠的。 使用触摸的t来判断用户何时移动他们的触摸点的确很简便,但是不同系统的行为是不同的。有些系统只会报告一个移动事件(因此触摸的t不会改变),但由于惯性或是系统级处理,触摸的位置依旧会改变。

输入延迟

在用户实际触摸屏幕和操作系统实际接收到事件之间,有一个不可避免的延迟。 因此,Sonolus提供了输入偏移校准,在引擎进行判断时应当将这个偏移考虑在内。 你可以从关卡数据模块中获取输入时间偏移的值。