我有一个 Observable 返回整数,如下所示:
1, 1, 1, 1, -1, -1, -1, -1, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0
如何将此 Observable 转换为返回这些整数的数组,而不是按基于时间的窗口而是按基于值的窗口拆分流?
这些整数是 Unity Update 事件中 Touch 的 FingerId。对于这项任务来说并不是那么重要,但为了解释为什么我需要它,我必须提供这些详细信息。-1 表示不触摸。这就是差距。我需要删除那些 -1 部分,并将流拆分到“无触摸”时刻之间的 FingerId 缓冲区。我也可以这样描述:
Touch0, Touch0, Touch0, no Touch, no Touch, Touch1
存在整数或其他类型并不重要。只需将流拆分为缓冲区,删除“窗口值”。
这是我的代码,如果有帮助的话:
var leftSideTouchStream = Observable.EveryUpdate()
.Scan(-1, (id, _) =>
{
if (id < 0)
{
var leftSideTouches = Input.touches
.Where(t =>
t.phase == TouchPhase.Began
&& t.position.x < Screen.width / 2
);
return leftSideTouches.Any() ? leftSideTouches.First().fingerId : -1;
}
else
{
var touchEnded = Input.touches
.Any(t =>
t.fingerId == id &&
(t.phase == TouchPhase.Ended || t.phase == TouchPhase.Canceled)
);
return touchEnded ? -1 : id;
}
})
.Select(id =>
{
return Input.touches
.Where(t => t.fingerId == id)
.Select(t => new Nullable<Touch>(t))
.FirstOrDefault();
});
我需要与 Buffer 函数给出的行为完全相同的行为,但正如我所说,根据值而不是时间。如果我有这个流:
1, 1, 1, 1, -1, -1, -1, -1, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0
并且“窗口值”为-1,则预期结果为:
[1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0]
MMTTMM
繁星点点滴滴
相关分类