【问题标题】:Cocos2d 2.0 - centering a sprite on a layerCocos2d 2.0 - 在图层上居中精灵
【发布时间】:2015-10-31 00:25:49
【问题描述】:

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

我该怎么做?

谢谢

【问题讨论】:

    标签: ios objective-c cocos2d-iphone


    【解决方案1】:

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

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

    精灵的锚点应该是(0.5, 0.5) 以使其围绕其中心旋转。

    我觉得你的程序太复杂了?你能不能只使用一个精灵而不是一个带有精灵的图层?然后你可以直接旋转它。

    看起来你想让你的精灵可触摸。如果您希望实现按钮,请考虑使用 CCMenuCCMenuItems。


    编辑

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

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

    场景 ============================================== = = = = = = = = = | = = |层(有效无限大小)= = __|__ = = | | | = = | +---|-------------- = = |_____| = = 雪碧 = ============================================== + 是图层的原点和精灵的中心点 当您围绕其原点旋转图层时,您同时围绕其中心旋转精灵。

    【讨论】:

    • 谢谢。我已经测试了所有选项,在我的情况下最好的是使用 CCLayers。问题是它们没有按中心旋转。就像图像的中心没有与 CCLayer 的中心对齐。
    • ahhhhhhhhhhhhhhhhhhhhhhhhhhhh 现在它正在正确旋转!!!!!!!!!!谢谢!!!!愿意解释这些价值观的逻辑吗?
    • 谢谢你,伙计!你为我省去了很多麻烦。奇怪的是,CCLayer 默认没有将他的锚点设置为 0,0。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多