2

我有一个在屏幕上弹跳的球。根据用户达到的水平,我让球跑得更快。所以,我做了以下事情:

[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是角度吗?

有谁知道如何随机化方向?

4

1 回答 1

6

您在内部使用的表达式CGVectorMake()本质上是从极坐标到笛卡尔坐标的转换。

x分量由给出radius * cos(theta),其中theta是以弧度为单位的角度。yradius * sin(theta)。零角通常指向右侧(“正东”)。

因此,只需更改theta即可更改矢量的方向。cosf()(将相同的数字传递给和是最明智的,但当然,无论你使用什么,sinf()你都会得到一些结果。)

于 2014-04-01T05:17:00.233 回答