我有一个CCSprite的子类,它在整个游戏中旋转,并且有一个盾牌必须根据精灵的旋转在精灵周围旋转。因此,如果精灵的旋转是75度,那么应该有一个位于75度的CGRect。 CGRect的尺寸是从属的,因为它几乎像一个正方形。
我做的是:
初始化后,我将此rect设置为
self.shieldArea = CGRectMake(self.position.x-30, self.position.y, 8, 10);
然后我旋转精灵本身,然而,矩形停留在其初始位置。
我希望CGrect会受到旋转的影响,但我有点期待它不会影响它,当然,为什么呢?所以,我的问题是,如何旋转CGRect呢?或者我是否必须一直添加新的CGRect?
附注:我不想使用Box2d或类似的东西。我自己处理碰撞检测。
答案 0 :(得分:1)
您是否尝试过CGAffineTransform
?
这样的事情:
float centerX = myOldRect.origin.x + (myOldRect.size.width / 2.0);
float centerY = myOldRect.origin.y + (myOldRect.size.height / 2.0);
CGAffineTransform rotation = CGAffineTransformMakeRotation(someAngleInRadians);
CGAffineTransform moveAnchor = CGAffineTransformMakeTranslation(centerX, centerY);
CGAffineTransform centeredRotation = CGAffineTransformConcat(moveAnchor, rotation);
CGRect rotatedRect = CGRectApplyAffineTransform(myOldRect, centeredRotation);
注意,这未经过测试。使用风险由您自己承担:p