2

早上好!

我只是想磨练我的数学能力,尤其是关于 Cocos2D 的一些问题。由于 Cocos2D 想要“简化”事物,所有精灵都有一个旋转属性,范围从 0-360(359?)CW。这迫使你在处理像 atan 这样的函数时做一些相当(对我来说)令人费解的转换。

所以 f.ex. 这种方法:

- (void)rotateTowardsPoint:(CGPoint)point
{    
    // vector from me to the point
    CGPoint v = ccpSub(self.position, point);

    // ccpToAngle is just a cute wrapper for atan2f
    // the macro is self explanatory and the - is to flip the direction I guess
    float angle = -CC_RADIANS_TO_DEGREES(ccpToAngle(v));

    // just to get it all in the range of 0-360
    if(angle < 0.f)
        angle += 360.0f;

    // but since '0' means east in Cocos..
    angle += 180.0f;

    // get us in the range of 0-360 again
    if(angle > 360.0f)
        angle -= 360.0f;

    self.rotation = angle;
}

按预期工作。但在我看来,这似乎是一种蛮力。有没有更清洁的方法来达到同样的效果?

4

2 回答 2

3

做就够了

float angle = -CC_RADIANS_TO_DEGREES(ccpToAngle(v));
self.rotation = angle + 180.0f;

等价变换

于 2012-06-07T06:38:45.240 回答
0
// vector from me to the point
    CGPoint v = ccpSub(self.position, point);

实际上,这是从点到你的向量。

// just to get it all in the range of 0-360

你不需要这样做。

于 2012-06-07T06:31:33.730 回答