Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C reactiveX多点触控拖动清除OnPointerUp事件上的缓冲区_C#_Unity3d_System.reactive_Unirx - Fatal编程技术网

C# C reactiveX多点触控拖动清除OnPointerUp事件上的缓冲区

C# C reactiveX多点触控拖动清除OnPointerUp事件上的缓冲区,c#,unity3d,system.reactive,unirx,C#,Unity3d,System.reactive,Unirx,我正在尝试在unirx中实现多点触控拖动以实现统一。我使用Buffercount、skip重载获取每个手指的最后一个事件并计算距离 我现在希望在抬起手指时清除缓冲区,否则仍在缓冲区中的旧值将创建一个大的增量 私有IObservable CalculateDeltaIObservable DrageEvent,int pointerId{ 回流排水孔 .Wheredata=>data.pointerId==pointerId .Selectdata=>data.position .2,1 .Sel

我正在尝试在unirx中实现多点触控拖动以实现统一。我使用Buffercount、skip重载获取每个手指的最后一个事件并计算距离

我现在希望在抬起手指时清除缓冲区,否则仍在缓冲区中的旧值将创建一个大的增量

私有IObservable CalculateDeltaIObservable DrageEvent,int pointerId{ 回流排水孔 .Wheredata=>data.pointerId==pointerId .Selectdata=>data.position .2,1 .SelectIList list=>new TwoFingerDragEventData 向量2.距离列表[0],列表[1], 列表[1]-列表[0] ; }
我现在解决了这个问题,把整个事情包装成另一个可观察的东西

我使用一个BehavitySubject isDragActiveSource,它在拖动开始事件时设置为true,在拖动停止事件时设置为false

isDragActiveSource .可观察 .WhereisActive=>isActive==true .SelectManybool=>{ IObservable firstTouch=CalculateDeltaonDrag,0; IObservable secondTouch=计算出的ltaondrag,1; 返回firstTouch.Zip 第二次接触, TwoFingerDragEventData左,TwoFingerDragEventData右=>TwoFingerDragEventData.Avgleft,右 .takentilisdragactive.WhereisActive=>isActive==false; }
当行为主体发出虚假的firstTouch和secondTouch观察值时,这些观察值被完成,直到它再次变为真实时,它们才被重新创建。

我现在通过将整个事件包装到另一个观察值中解决了这个问题

我使用一个BehavitySubject isDragActiveSource,它在拖动开始事件时设置为true,在拖动停止事件时设置为false

isDragActiveSource .可观察 .WhereisActive=>isActive==true .SelectManybool=>{ IObservable firstTouch=CalculateDeltaonDrag,0; IObservable secondTouch=计算出的ltaondrag,1; 返回firstTouch.Zip 第二次接触, TwoFingerDragEventData左,TwoFingerDragEventData右=>TwoFingerDragEventData.Avgleft,右 .takentilisdragactive.WhereisActive=>isActive==false; }
当行为主体发出虚假的firstTouch和secondTouch观察值时,这些观察值将被完成,直到再次变为真实时,这些观察值将被重新创建。

该方法中需要三条说明。1 var results=dragEvent和查询的其余部分2 Clear buffer 3返回结果@问题是如何清除缓冲区?缓冲区是可观察的内部缓冲区,据我所知,它不提供这种功能。它不是dragEvent.data吗?不,它不是内部的可观察的。它在注册时被传递给事件,并且始终是同一个对象。最好对静止的观察对象使用开关操作符。首先建立一个IObservable,然后。开关将其转换为一个IObservable,从而只生成来自最近外部可观察对象的最新内部值。@Enigmativity是的,我就是这样做的,请参见下面的答案@jdweng dragEvent是一个“IObservable”,在该方法中需要三条指令。1 var results=dragEvent和查询的其余部分2 Clear buffer 3返回结果@问题是如何清除缓冲区?缓冲区是可观察的内部缓冲区,据我所知,它不提供这种功能。它不是dragEvent.data吗?不,它不是内部的可观察的。它在注册时被传递给事件,并且始终是同一个对象。最好对静止的观察对象使用开关操作符。首先建立一个IObservable,然后。开关将其转换为一个IObservable,从而只生成来自最近外部可观察对象的最新内部值。@Enigmativity是的,我就是这样做的,请参见下面的答案@jdweng dragEvent是一个“可观察的”