私がやろうとしていることを説明することから始めましょう。約 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 の 2 つのバージョンを作成していないためです。代わりに、それらを中間のサイズにしてから、どのデバイスが実行されているかを確認し、それに応じてスプライトをスケーリングします。ここに私の問題があります。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 です。
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 のアンカー ポイントを尊重しませんか?