0

让我首先解释我想要做什么。我有一个大约 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;
}

所以检查什么设备正在运行的原因是因为我没有制作两个版本的动画帧 HD 和 SD。相反,我只是让它们在大小之间变得合适,然后我检查正在运行的设备并相应地缩放精灵。所以这是我的问题,我将 Sprites 锚点设置为屏幕的右下角,这样当我更改 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 是否有自己的锚点或正在发生的事情。

这是正在发生的事情的图示。这是为完整纹理设置的 CCSprite,并且锚点位于右下角。 在此处输入图像描述

   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 设置得更小一些。

在此处输入图像描述

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

在此处输入图像描述

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

4

1 回答 1

0

撇开缩放问题不谈,你可以做两件事。首先,可能也是最简单的,就是简单地在动画顶部添加一个 CCLayerColor 并相应地缩小它。这样您就不需要修改每个动画帧的矩形。

第二种选择是使用剪切节点,在这里可以找到:

这里

于 2013-05-16T22:08:35.893 回答