CCSprite anchorPoint无法按预期工作?

时间:2013-05-13 21:33:35

标签: cocos2d-iphone sprite ccsprite

首先让我解释一下我要做的事情。我有一个大约73帧的全屏幕动画,这些图像太大我无法使用精灵表,所以我只是将它们作为单独的精灵帧添加到动画中。我的目标是让动画播放,然后让它从左到右消失。我实现这种外观的方式是更新帧的(textureRect)宽度,最终使textureRect宽度为0.所以我设置了CCSprite,我将在其上运行动画。

-(id) init {

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

        self.transSprite = [CCSprite spriteWithFile:@"transition0.pvr.ccz"];

        if (CC_CONTENT_SCALE_FACTOR() == 1) {

            //iPhone 3Gs

            self.transSprite.scaleX = .563;
            self.transSprite.scaleY = .665;

            self.transSprite.position = ccp(self.transSprite.contentSize.height - 3, -1);
            self.transSprite.anchorPoint = ccp(1, 0);
            [self addChild:self.transSprite z:5];

        }

        else if (kiPhone5) {

            //iPhone 5

            self.transSprite.scale = self.transSprite.scale * 1.335f;

            self.transSprite.position = ccp(569, -1);
            self.transSprite.anchorPoint = ccp(1, 0);
            [self addChild:self.transSprite z:5];

        }

        else {

            //iPhone 4

            self.transSprite.scaleX = 1.126;
            self.transSprite.scaleY = 1.33;

            self.transSprite.position = ccp(481, -1);
            self.transSprite.anchorPoint = ccp(1, 0);
            [self addChild:self.transSprite z:5];

        }

    }

    return self;
}

因此检查设备运行的原因是因为我没有制作2个版本的动画帧HD和SD。相反,我只是让它们在大小之间做得很好,然后我检查看看正在运行的设备并相应地缩放精灵。所以这是我的问题我将Sprites anchorPoint设置到屏幕的右下角,这样当我更改textureRect的宽度时,它将从左到右减小。除了当我改变每个精灵帧的textureRect的宽度时,一切似乎都很好用这个想法。

- (void) rectUpdate3Gs {

    for (CCAnimationFrame *frame in transition.frames) {
        frame.spriteFrame.rect = CGRectMake(0, 0, 856, 484);
    }

}

- (void) retinaRectUpdate {

    for (CCAnimationFrame *frame in transition.frames) {
        frame.spriteFrame. rect = CGRectMake(0, 0, 428, 242);

    }

}

因此,当我运行动画并开始更改textureRect的宽度时,它会从左侧和右侧减小,这就像是忽略了anchorPoint。 spriteFrames是否有自己的anchorPoint或正在发生的事情。

以下是正在发生的事情的说明。这是为完整纹理设置的CCSprite,右下角是anchorPoint。 enter image description here

   self.transSprite.scaleX = .563;
    self.transSprite.scaleY = .665;

    self.transSprite.position = ccp(self.transSprite.contentSize.height - 3, -1);
    [self addChild:self.transSprite z:5];
    [self.transSprite setTextureRect:CGRectMake(0, 0, 856, 484)];
    self.transSprite.anchorPoint = ccp(1, 0);

现在,这是将CCSprite的textureRect设置得更小。

enter image description here

这是我希望它工作的方式,是从左到右减去纹理的宽度。但是当我改变动画帧的宽度以匹配这个减去的宽度时,这就是我得到的。

enter image description here

我不知道为什么会这样。动画帧是否不尊重它们正在运行的CCSprite的锚点?

1 个答案:

答案 0 :(得分:0)

除了扩展问题,你可以做两件事。首先,也许最简单的方法是简单地在动画之上添加CCLayerColor并相应地缩小它。这样您就不需要修改每个动画帧的rect。

第二个选项是使用剪切节点,可在此处找到:

Here