Как разместить спрайты по кривой в 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, то это не должно быть проблемой.

Другие вопросы по тегам