0

ゲーム全体で回転するCCSpriteのサブクラスがあり、スプライトの回転に応じてスプライトの周りを回転する必要があるシールドがあります。したがって、スプライトの回転が75度の場合、75度にCGRectが配置されているはずです。CGRectの寸法は、ほぼ正方形に似ているため、従属しています。

私がしたことは:

  • CCSpriteをサブクラス化し、shieldAreaというプロパティを追加しました。
  • 初期化時に、このrectを次のように設定しました

    self.shieldArea = CGRectMake(self.position.x-30, self.position.y, 8, 10);
    
  • 次に、スプ​​ライト自体を回転させますが、rectは初期位置に留まります。

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