2016-07-04 3 views
2

私はマウスの左ボタンの状態のためのストリームを持っている:IObservable <IObservable <T>>をIObservable <IEnumerable <T>>にするにはどうすればよいですか?

var leftMouseButton = mouse.Select(x => x.LeftButton).DistinctUntilChanged(); 

私はその後、Window、これは私のマウスのドラッグを表す観測の観測可能を与える:

var leftMouseDrag = mouse 
    .Select(mouseState => new Point(mouseState.X, mouseState.Y)) 
    .DistinctUntilChanged() 
    .Window(leftMouseButton.Where(x => x == ButtonState.Pressed), x => leftMouseButton.Where(y => y != x)); 

今、私はポイントのリストを示すleftMouseDragのストリームをオフにしたいとします。ユーザーがドラッグを完​​了するたびに(LMBダウン - >移動 - > LMBアップ)、マウスが移動した位置のリストと共に起動する必要があります。

IObservable<IObservable<Point>>を受け取ってIObservable<IEnumerable<Point>>にするにはどうすればよいですか?

+0

でしたドラッグ・アンド・ドロップを使用せず、 'BeginDrag'と' E ndDrag' eventArgs? –

+0

@ BarryO'Kane私はMonoGameからマウスAPIを使用しています。 – sdgfsdh

+1

ああ、十分です。私の悪い:) –

答えて

1

変更あなたのWindow演算子演算子(IListがのであるオペレータがIObservable<IList<T>>生成this overload).

BufferからIEnumerable


代替ソリューションOPのコメントに基づいて:あなたは

var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList()); 
+0

申し訳ありません私は私の質問に私は 'leftMouseDrag'を使用しているので、私はそれを変更しないようにしたいと言いませんでした。 – sdgfsdh

関連する問題