旋转CCSprite的CGRect属性?

时间:2012-11-28 19:44:29

标签: iphone objective-c cocos2d-iphone cgrect

我有一个CCSprite的子类,它在整个游戏中旋转,并且有一个盾牌必须根据精灵的旋转在精灵周围旋转。因此,如果精灵的旋转是75度,那么应该有一个位于75度的CGRect。 CGRect的尺寸是从属的,因为它几乎像一个正方形。

我做的是:

  • 我将CCSprite子类化,并添加了一个名为shieldArea的属性。
  • 初始化后,我将此rect设置为

    self.shieldArea = CGRectMake(self.position.x-30, self.position.y, 8, 10);
    
  • 然后我旋转精灵本身,然而,矩形停留在其初始位置。

我希望CGrect会受到旋转的影响,但我有点期待它不会影响它,当然,为什么呢?所以,我的问题是,如何旋转CGRect呢?或者我是否必须一直添加新的CGRect?

附注:我不想使用Box2d或类似的东西。我自己处理碰撞检测。

1 个答案:

答案 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