如何在cocos2d中沿着曲线放置精灵

时间:2014-02-25 22:36:08

标签: objective-c cocos2d-iphone curve bezier cocos2d-iphone-2.x

我的游戏设置依赖于沿曲线放置几个精灵,这些精灵可能看起来像弓形,椭圆形,或者稍微复杂一些(假设它会更加曲折)。我希望能够将我的精灵放在相同的距离之外。

有人可以分享如何做到这一点吗?

使用cocos2d 2.1

1 个答案:

答案 0 :(得分:0)

我不知道是否有更简单的方法可以做到这一点,但我们可以通过使用该曲线的数学方程式沿着任何曲线排列精灵。

对于抛物线曲线(优点:对称,因此容易放置等距点) 找出满足start和EndPoints的等式,并使用下面的函数获得开始和结束之间等距x点的y值。

示例: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);

}

您可以为Bezier曲线提供类似的功能: (贝塞尔曲线)

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轴的距离那么这应该不是问题。