我对此问题感到困惑已有一段时间了,我找不到类似的话题,所以......
我创建了一个基于圆度来计算旗帜位置的基本方法:
-(CGPoint)positionOnArc
{
CGFLoat posX = _circle.position.x + (arcRadius)*cos(degrees);
CGFLoat posY = _circle.position.y + (arcRadius)*sin(degrees);
return CGPointMake(posX, posY);
}
现在的问题是:如何强制旗帜以比圈子更慢的速度移动?我希望达到一种效果,即每旋转3度,旗帜移动1度。
创建第二个圆圈,其上附有标志并将旋转速度基于第一个圆圈的速度是不可能的。我需要让旗帜的位置“坚持并且跟在后面”点的度数点。
我知道答案可能很痛苦但我无法将其包裹在脑海中,所以任何提示都会非常感激。
编辑: 我确实设法为我找到了一个足够好的解决方案,所以我将它粘贴在这里,因为它可能会帮助其他像我一样的新手来解决类似的问题。
-(CGPoint)positionOnArc
{
//Angle range between which the Dot is moving in percentages.
CGFloat dotMovementRangePercentage = 100 * _circle.zRotation
- circleLeftAngleBoundary) / (circleRightAngleBoundary -
circleLeftAngleBoundary);
//Degree on which the Flag is currently at.
CGFloat flagPositionAnglePoint = ((flagLeftAngleBoundary
- flagRightAngleBoundary) * dotMovementRangePercentage)
+ flagLeftAngleBoundary);
//These two make sure that the flag will be moving slowly behind.
if (flagPositionAnglePoint > 90) {
flagPositionAnglePoint = flagPositionAnglePoint
- (1*(flagPositionAnglePoint/3 - 30));
}
if (flagPositionAnglePoint < 90) {
flagPositionAnglePoint = flagPositionAnglePoint
+ (1*(flagPositionAnglePoint/3 - 30));
}
//Final position is calculated here.
CGFloat posX = _circle.position.x
- arcRadius*cos(-(flagPositionAnglePoint*M_PI)/180);
CGFloat posY = _circle.position.y
- arcRadius*sin(-(flagPositionAnglePoint*M_PI)/180);
return CGPointMake(posX, posY);
}
这可能不是最佳/最有效/最合理的方式,但我认为这是一个很好的开始。