我的游戏设置依赖于沿着可能看起来像弓形、椭圆形或更复杂的曲线放置几个精灵(假设它是贝塞尔曲线)。我希望能够将我的精灵放置在稍微相等的距离上。
谁能分享如何做到这一点?
使用 cocos2d 2.1
我的游戏设置依赖于沿着可能看起来像弓形、椭圆形或更复杂的曲线放置几个精灵(假设它是贝塞尔曲线)。我希望能够将我的精灵放置在稍微相等的距离上。
谁能分享如何做到这一点?
使用 cocos2d 2.1
我不知道是否有更简单的方法可以做到这一点,但我们可以通过使用该曲线的数学方程沿任何曲线排列精灵。
对于抛物线曲线(优点:对称,因此易于放置等距点)找出满足您的起点和终点的方程,并使用以下函数获得起点和终点之间等距 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);
}
你可以为贝塞尔曲线想出一个类似的函数:(贝塞尔三次曲线)
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 轴的距离,那么这应该不是问题。