【发布时间】:2011-05-29 11:17:54
【问题描述】:
在 cocos2d 中,您可以使用 ccBezierConfig 在 Bezier 路径中移动精灵。但这不是我的问题,我有一枚导弹,并试图让它垂直于曲线上的那个点旋转。我有一段时间想不通,然后我的朋友告诉我衍生品。现在我显然需要找到贝塞尔曲线的导数。我在谷歌上搜索并在这个页面上找到了它:http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-der.html。所以我尝试用 3 种方法来实现旋转导弹:
-(float)f:(int)x {
if (x == 0)
return 1.0f;
float result = 1;
while (x>0) {
result = result*x;
x--;
}
return result;
}
-(float)B:(float)u i:(int)i n:(int)n {
return ([self f:n])/([self f:i]*[self f:(n-i)])*pow(u, (float)i)*pow(1-u, (float)n-i);
}
-(void)rotateMissile:(float)delta {
//Get bezier derivative...
float y = [self B:missileP1.controlPoint_1.x i:0 n:2]+[self B:missileP1.controlPoint_2.x i:1 n:2]
*2*(missileP1.controlPoint_1.x - missileP1.controlPoint_2.x);
//Take the y and rotate it...
missile1.rotation = atanf(y);
}
第一种方法适用于阶乘,第二种方法应该在方程导数中找到 B。第三种方法是通过使用 atanf 将斜率转换为度数来找到实际导数并旋转导弹。
rotateMissile 像这样被连续调用:
[self schedule:@selector(rotateMissile:)];
missileP1 是 ccBezierConfig 对象。导弹 1 是我要旋转的导弹。我只是对这整个衍生事物感到非常困惑(换句话说,我真的很迷茫和困惑)。我需要帮助来找出问题所在...抱歉,代码很混乱,方程式很长,我可以想办法让它不那么混乱。
【问题讨论】:
标签: iphone cocos2d-iphone bezier