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