おはようソ!
私は数学を磨こうとしているところで、特に 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;
}
意図したとおりに動作します。しかし、私にはそれは一種のブルートフォースのように見えます。同じ効果を達成するためのよりクリーンな方法はありますか?