Я создал простую «систему игровых циклов», основанную на RxJS, где я запрашиваю действия у различных участников (включая пользователя) и объединяю их с оператором .zip.
Результатом является пошаговый игровой цикл, который приостанавливается только для анимации и запроса действий пользователя.
Благодаря этой системе пользователь может ставить в очередь несколько действий, и система будет сохранять их в.zip оператор.Однако я хочу очистить эту «очередь», если пользователь решит передумать.
У меня есть скрипка: https://jsfiddle.net/az5pthng/6/
Представьте, что пользователь вводит последовательность a1, a2, a3, a4,затем думает на секунду и решает изменить последовательность на b1, b2, b3, b4.Затем снова думает и набирает c1, c2, c3, c4.
В настоящее время у меня есть этот вывод, показывающий, что каждое нажатие клавиши записывается и воспроизводится:
(3) ["A", "B", "a1"]
(3) ["A", "B", "a2"]
1100
(3) ["A", "B", "a3"]
(3) ["A", "B", "a4"]
1723
(3) ["A", "B", "b1"]
(3) ["A", "B", "b2"]
(3) ["A", "B", "b3"]
(3) ["A", "B", "b4"]
(3) ["A", "B", "c1"]
(3) ["A", "B", "c2"]
(3) ["A", "B", "c3"]
(3) ["A", "B", "c4"]
Но я хочу этот вывод, указывая, чтовсякий раз, когда queueTime $ выдает значение - очередь $ получает «сброс» с новыми значениями:
(3) ["A", "B", "a1"]
(3) ["A", "B", "a2"]
1100
(3) ["A", "B", "b1"]
(3) ["A", "B", "b2"]
1700
(3) ["A", "B", "c1"]
(3) ["A", "B", "c2"]
(3) ["A", "B", "c3"]
(3) ["A", "B", "c4"]
РЕДАКТИРОВАТЬ: Вот картинка, которую я пытаюсь сделать:
Два потока - Turn и Q
Turn должен как-то запрашивать A и B и ждать, пока Q предоставит его значение, если оно есть.Когда Q предоставляет значение, Turn ждет некоторое время, а затем повторяется.Q, однако, разбивает его значения по времени (я думаю, с помощью .window?) И отбрасывает все значения, которые не отправляются в Turn, если поступает новая последовательность.