0

CClayerクラスがあり、このクラスを開始すると、中央に配置する必要があるCCSpriteが作成されるため、後でそのCCLayerクラスで作成されたオブジェクトを回転すると、その中心を中心に回転します。つまり、そのクラスのスプライトが幅200ピクセル、高さ300ピクセルの画像である場合、CCLayerピボットを100,150にする必要があります。

私はそれを0,0と0.5,0.5に設定しようとしましたが成功しませんでした。

私の知る限り、CCLayerにはバウンディングボックスがなく、一種のノードのようなものですよね?したがって、次のようなクラスを作成します。

-(id) initWithImage:(UIImage*)image Name:(NSString*)name
{

    if( (self=[super init])) {

        self.isTouchEnabled = YES;

        self.mySprite = 
            [CCSprite spriteWithCGImage:image.CGImage key:name];

        self.mySprite.position = CGPointZero;
        [self addChild:self.mySprite];

        self.mySprite.anchorPoint = ccp(0.0f, 0.0f);
        // have tried also 0.5f, 0.5f... no success        
    }

    return self;
}

それ、どうやったら出来るの?

ありがとう

4

1 に答える 1

6

CCLayerサブクラスに、スプライトを回転させるメソッドを提供します。

-(void) rotateMySpriteToAngle:(float) angle
{
    self.mySprite.rotation = angle;
}

スプライトのアンカーポイントは、スプライトを(0.5, 0.5)その中心を中心に回転させることです。

プログラムを複雑にしすぎているように感じますか?子としてスプライトを持つレイヤーの代わりにスプライトを使用できますか?次に、それを直接回転させることができます。

スプライトをタッチ可能にしたいように見えます。ボタンの実装を検討している場合はCCMenu、との使用を検討してください。CCMenuItem


編集

レイヤー(0, 0)のアンカーポイントをに、スプライトのアンカーポイントをに設定してから(0.5, 0.5)、スプライトの位置をに設定してみてください。(0, 0)

これは、スプライトの中心が(0, 0)レイヤー上にあり、レイヤーをその原点を中心に回転させることを意味します。

                    シーン
=============================================
= =
= =
= =
= =
= | =
= | レイヤー(有効な無限サイズ)=
= __ | __ =
= | | | =
= | +-| -------------- =
= | _____ | =
=スプライト=
=============================================
+は、レイヤーの原点であり、スプライトの中心点です。
レイヤーをその原点を中心に回転させると、同時にスプライトをその中心を中心に回転させます。
于 2012-06-07T09:26:42.100 に答える