Cocos2d 2.0 - 将精灵集中在一个图层上

时间:2012-06-07 09:12:31

标签: ios objective-c cocos2d-iphone

我有一个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;
}

我该怎么做?

感谢

1 个答案:

答案 0 :(得分:6)

在CCLayer子类中提供一个旋转精灵的方法:

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

精灵的定位点应为(0.5, 0.5),以围绕其中心旋转。

我觉得你的节目太复杂了吗?你可以使用精灵而不是一个带有精灵的图层作为孩子吗?然后你可以直接旋转它。

看起来好像你想让你的精灵可以触摸。如果您要实现按钮,请考虑使用CCMenuCCMenuItem


修改

尝试将图层的锚点设置为(0, 0),将精灵的锚点设置为(0.5, 0.5),然后将精灵的位置设置为(0, 0)

这意味着精灵的中心位于图层上的(0, 0),然后围绕它的原点旋转图层。

                    Scene
=============================================
=                                           =
=                                           =
=                                           =
=                                           =
=       |                                   =
=       | Layer (effective infinite size)   =
=     __|__                                 =
=    |  |  |                                =
=    |  +--|--------------                  =
=    |_____|                                =
=     Sprite                                =
=============================================
The + is the origin of the layer and the center point of the sprite
When you rotate the layer around it's origin, you are simultaneously rotating the sprite about it's centre.