0

私は肖像画のギャラリー (博物館のような) を持つアプリを構築しており、私のキャラクターは左から右から左にそれらを通り過ぎます。私のポートレート(画像)はすべて2048x2048です。iPad版でも使えるようにしたいので、まだ縮小はしていません。一度にすべてを読み込もうとするとクラッシュするため、サイズが大きいことが問題であることはわかっています(また、画像が10個しかない場合でも起動に時間がかかります)。

そうは言っても、私の本当の問題は、必要に応じてそれら (スプライト) を追加/削除するための効率的な方法を作成しようとすることです。私はうまくいくものを思いつきましたが、これは明らかに最善の方法ではありません。

誰かがより効率的なアプローチを提案できることを願っています。

これが私のコードです。framedSprites と呼ばれる変更可能な配列に画像をロードする別の方法を想定できます (ただし、サイズ/クラッシュのために一度に 10 個しかロードできません)。次のメソッド (checkPosition) は、(TouchMoved スワイプによって) 画面の位置が変わるたびに呼び出されます。私が見ているように、配列内の各画像/ポートレートに対して同様のステートメントを作成する必要があります (非常に非効率的で時間がかかります)...

-(void)checkPosition {

CGSize winSize = [CCDirector sharedDirector].winSize;

for (CCSprite *sprite in framedSprites) {

    if (sprite.tag == 2) {

        if ((sprite.position.x > 2000.0f)&&(sprite.position.x < 2010.0f)) {

            CCSprite *portrait = (CCSprite *)[_backgroundNode getChildByTag:0];

            if (portrait.tag == 0) {

                NSLog(@"Removing a Portrait Left 2 Places From This One");

                 [_backgroundNode removeChildByTag:0 cleanup:YES];

            }
        }

        if ((sprite.position.x > 1980.0f)&&(sprite.position.x < 1990.0f)) {

            CCSprite *portrait = (CCSprite *)[_backgroundNode getChildByTag:0];

            if (portrait == nil) {

                CCSprite * framedSprite = (CCSprite *)[framedSprites objectAtIndex:0];

                NSLog(@"Adding a Portrait Left, 2 Places From This One");

                framedSprite.position = ccp(600,winSize.height/2);  //figuring these positions is also not efficient and time consuming

                [_backgroundNode addChild:framedSprite z:0 parallaxRatio:ccp(0.4f,0.5f) positionOffset:framedSprite.position];

            }
        } 
    }
}   
}
4

1 に答える 1

0

いずれかの方向にスクロールできるようにするには、一度に 3 つの画像をロードするだけで十分です (y 方向への移動も許可していないと仮定します)。表示されているもの、どちらか一方をバッファーとして使用し、必要に応じて遅延ロードと置換を行います。

画像全体を一度に表示する必要がない場合は、Tilen (http://itunes.apple.com/gb/app/tilen/id409199185?mt=12) などの無料ツールを使用してタイルに分割することも検討できます。必要に応じてタイルをロードします。

于 2012-08-07T17:57:08.177 に答える