私は肖像画のギャラリー (博物館のような) を持つアプリを構築しており、私のキャラクターは左から右から左にそれらを通り過ぎます。私のポートレート(画像)はすべて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];
}
}
}
}
}