首先让我解释一下我要做的事情。我有一个大约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。
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的锚点?
答案 0 :(得分:0)
除了扩展问题,你可以做两件事。首先,也许最简单的方法是简单地在动画之上添加CCLayerColor并相应地缩小它。这样您就不需要修改每个动画帧的rect。
第二个选项是使用剪切节点,可在此处找到: