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 の 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 のアンカー ポイントを尊重しませんか?

4

1 に答える 1

0

スケーリングの問題はさておき、できることが 2 つあります。まず、おそらく最も簡単な方法は、アニメーションの上に CCLayerColor を追加し、それに応じて縮小することです。この方法では、すべてのアニメーション フレームの四角形を変更する必要はありません。

2 番目のオプションは、ここにあるクリッピング ノードを使用することです。

ここ

于 2013-05-16T22:08:35.893 に答える