在过去的两天里,我一直在弄清楚从弓上射出的箭的运动,但没有完美的最终结果。这是我到目前为止所拥有的:
- (void) update:(ccTime) dt {
elapsedTime += dt;
CGFloat t = elapsedTime;
float theta = CC_DEGREES_TO_RADIANS(angle);
velocity = ccp (initialVelocity.x* cos(theta), initialVelocity.y*sin(theta));
float k = 0.3; //this would be the air resistance factor
float vvx = sqrtf( velocity.x*velocity.x + velocity.y*velocity.y );
float vvy = sqrtf( velocity.x*velocity.x + velocity.y*velocity.y );
CGFloat ax = -k*vvx; //accelerationX
CGFloat ay = -k*vvy - gravity; //accelerationY
velocity = ccp(velocity.x + ax * t , velocity.y + ay * t);
CGPoint oldPosition = self.position;
CGPoint newPosition = ccp(self.position.x + velocity.x * t + ax * t * t, self.position.y + velocity.y * t + ay * t * t);
CGPoint v1 = CGPointMake(0.0, 0.0);
CGPoint v2 = CGPointMake(newPosition.x - oldPosition.x , newPosition.y - oldPosition.y);
CGFloat newAngle = (atan2(v2.y, v2.x) - atan2(v1.y, v1.x));
self.rotation = CC_RADIANS_TO_DEGREES(-newAngle);
self.position = newPosition;
}
使用此代码,我得到了这种行为:
使用:k = 0.3,角度 = 0 度,重力 = 9.8
initialVelocity = 100 时,箭头的抛物线轨迹很好
initialVelocity = 200 时,箭头移动得更快,但轨迹与 initialVelocity = 100 完全相同
在 initialVelocity = 300 时,箭头移动得更快,轨迹略有不同,但仍然非常接近 initialVelocity = 100 的轨迹
我的代码有问题吗?请注意,我对所有概念都没有很好的理解,根据我在网上阅读的内容,大部分实现都是命中注定的。