0

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

我所做的是:

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

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

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

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

4

1 回答 1

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

于 2012-11-28T20:25:15.767 回答