Как разместить спрайты по кривой в cocos2d
Настройка моей игры основана на размещении нескольких спрайтов вдоль кривой, которая может выглядеть как лук, эллипс или быть немного более сложной (предположим, что тогда это будет кривая Безье). Я хочу иметь возможность размещать свои спрайты на несколько равных расстояниях друг от друга.
Кто-нибудь может поделиться, как это можно сделать?
Использование cocos2d 2.1
1 ответ
Я не знаю, есть ли более простой способ сделать это, но мы могли бы расположить спрайт вдоль любой кривой, используя математическое уравнение для этой кривой.
Для параболической кривой (преимущество: симметричное, так легко размещать равноудаленные точки) Найдите уравнение, которое удовлетворяет вашим начальным и конечным точкам, и получите значения y для равноотстоящих точек x между началом и концом, используя функцию ниже.
пример: y = -x^2 + 20x - 1 (общее уравнение: y = ax^2 + bx + c)
static inline parabolicYValue(float x, float a,float b, float c){
return (powf(a*x,2) + b*x + c);
}
Вы можете придумать аналогичную функцию для кривых Безье: (кубическая кривая Безье)
static inline CGFloat bezierYValue( float a, float b, float c, float d, float x )
{
return (powf(1-x,3) * a +
3*x*(powf(1-x,2))*b +
3*powf(x,2)*(1-x)*c +
powf(x,3)*d );
}
Тем не менее, получение эквидистантных точек на кривой Безье - это немного хлопотно. С другой стороны, если вы под эквидистантностью имеете в виду расстояние только вдоль оси x, то это не должно быть проблемой.