2015-10-05 3 views
1

Я хотел бы нарисовать кривую линию и прикрепить к ней объект. Можно ли создать дробь (от 0.0 до 1.0), которая заставляет перемещать мой объект на путь? Когда фракция равна 0, тогда объект находится в начале, когда 0.5 находится на половине пути и, наконец, когда он равен 1.0, он находится в конце. Конечно, я хочу изогнутый путь, а не прямую линию :) Можно ли сделать это в PaintCode?PaintCode - перемещать объект по пути

+0

Не уверен, что это подходящее место, но я попробовал то же самое и пришел к выводу: Нет, это невозможно в PaintCode. – Leandros

+0

Это язык программирования, так что это вполне возможно, но вам не хватает важной информации. Должна ли скорость по пути быть линейной, основанной на физике или «чем угодно»? Поскольку вы отметили это «безье», что является совершенно нелинейной кривой: объекты, движущиеся вдоль кривых безье, будут делать это довольно быстро вдоль прямых участков и замедляться пропорционально кривизне пути. В то время как параметр = значения расстояния 0 = 0%, 0,5 = 50% и 1 = 100% по определению истинны, ни один из других параметров = значения расстояния не будет соответствовать кривым Безье, поэтому просто дать эти три значения недостаточно. –

+0

, но мне не нужна анимация. я хотел бы использовать его в качестве визуального индикатора прогресса :) просто хочу установить значение 0.5 и иметь свой объект в половине пути безье –

ответ

0

Основываясь на том, что вы собираетесь ходить по кривой с использованием линейного расстояния, кривые Безье ужасны, вам нужно самостоятельно построить линейное отображение. Это довольно просто:

Когда вы рисуете кривую, также создайте таблицу поиска, которая пробовит кривую один раз, скажем 100 точек (t = 0, t = 0,01, t = 0,02 и т. Д.). В псевдокоде:

lut = []; 
lut[0] = 0; 
tlen = curve.length(); 
for(v=0; v<=100; v++) { 
    t = v/100; 
    clen = curve.split(0,t).length(); 
    percent = 100*clen/tlen; 
    lut[percent] = t; 
} 

Это может оставить пробела в вашем LUT - вы можете исправить их в качестве вторичного шага, или просто оставить их и сделать бинарное сканирование в массиве, чтобы найти ближайший «имеет значение "процент.

Затем, когда вам нужно показать свой прогресс как некоторое процентное значение, вы просто посмотрите на соответствующее значение t: скажем, вам нужно показать 83%, вы посмотрите вверх lut[83] и нарисуйте свой объект на значение, которое дает вам.

2

Если вам это нужно как индикатор выполнения, это возможно в PaintCode. Фокус в том, чтобы использовать пунктирный штрих с очень большим зазором, а затем просто изменить Dash.

Example

Тогда просто прикрепить переменную, и вы сделали.


Edit: Что касается обсуждения в рамках первоначальной должности, это решение использует точки как блок, так что она будет равномерно распределяться по кривой, независимо от того, как изогнута Безье есть.