我有一个球在屏幕周围反弹。根据用户所达到的水平,我让球更快。所以,我做了以下几点:
[ball.physicsBody applyImpulse:[self vectorForLevel:self.level]];
构建CGVector
。
- (CGVector)vectorForLevel:(int)level {
CGFloat thrust = level+3;
return CGVectorMake(thrust*cosf(4), thrust*sinf(-4));
}
虽然这个效果非常好,并且可以像我想的那样加快每个级别的速度,但我还想随机化球开始的角度,但我不知道该怎么做。
我不太了解CGVector
真正知道如何改变角度。我投入的4和-4是角度吗?
有谁知道如何随机化方向?
答案 0 :(得分:6)
您在CGVectorMake()
中使用的表达式实质上是从极坐标到笛卡尔的转换。
x 组件由radius * cos(theta)
给出,其中 theta 是以弧度表示的角度。 y 是radius * sin(theta)
。零角度通常指向右侧(“正东方”)。
因此,只需更改 theta 即可更改矢量的方向。 (将同一个数字传递给cosf()
和sinf()
是最明智的,但无论你使用什么,当然你都会得到一些结果。)