Редактировать Неправильный ответ, не решить проблему, заданную ОП (см. Комментарий)
Старый ответ (до редактирования) Вы можете видеть, что это Проблема (как и большинство проблем на деревьях) может быть решена с помощью рекурсивного подхода. Это потому, что sum value
узла зависит только от sum values
и соответствующих ranks
его дочерних элементов.
Вот псевдокод, описывающий решение.
get_sum(my_node, result_arr):
my_sum = 0
for child in my_node.children():
get_sum(child, result_arr) // we compute the sum value of the children
if rank(child) >= rank(my_node): // if child node is big enough add its sum
my_sum += result_arr[child]
result_arr[my_node] = my_sum // store the result somewhere
Это алгоритм, основанный на BFS, который должен работать в O(n)
с n
количеством узлов в вашем дереве. Чтобы получить значения для всех узлов, вызовите эту рекурсивную функцию для корневого узла вашего дерева.
Перед запусками анимации, как насчет того, чтобы сохранить стартовую позицию?
startpostion = $(playerdiv).position(); //Or offset, I keep forgetting which
$(playerdiv).data("startTop",startposition.top);
$(playerdiv).data("startLeft",startposition.left);
Позже можно получить его использование
left = $(playerdiv).data("startTop")
и т.д.
Можно всегда предоставлять обратный вызов анимациям с помощью опции шага, этот способ, которым можно обновить ползунок соответственно.
$(playerdiv).animate({
top : targetTop,
left : targetLeft,
step, function(){ magic happens here
})
Я сделал бы это этот путь:
Если пользователь нажимает "Play", начните анимировать отделения от их текущей позиции до их места назначения. Можно легко вычислить остающееся время и позицию отделений в зависимости от положения ползунка:
(или что-то как этот, где sliderPosition - что-то между 0 и 1),
Если пользователь щелкает еще раз по ползунку, назовите .stop () методом на всех отделениях: тем путем они прекратят анимировать, и Вы сможете установить их статически: вычислите положение, в котором отделения должны быть и переместить их статически в ту точку.
Если пользователь "отбрасывает" ползунок, и "Игра" все еще активируется, то анимация должна продолжиться вперед от точки, ползунок был отброшен.
Это походит на хороший проект, Вы продолжаете работать :)