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 に答える