2012-01-17 2 views
0

私はCocos2dを学んでいて、一端にスプライトがあるアプリケーションを構築しています。反対側でそれを実行する必要があります。スプライトを画面から削除していて、同じ時間表示しています。イメージの配列でスプライトイメージを変更する方法cocos2d?

私は自分のアプリケーションに画像のフォルダを持っているので、同じフォルダから別の画像をランダムに順番にロードし、これらの画像が何度も何度も繰り返されないようにログを維持する必要があります。今どのように私はこの配列を呼び出し、異なる画像を毎回表示しても画像が繰り返しを取得しないことをログを維持する

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; 
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bundleRoot error:nil]; 
NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]]; 

:私はフォルダから画像を読み込むことができています。私はすでにthisthisのようなリンクを通過しましたが、ベイルには入っています。どんな手がかりも本当にとても役に立ちます。事前に助けてくれてありがとう。

答えて

1

これを行う最も良い方法は、スプライトシートを作成することです。まずはhttp://zwoptexapp.com/を無料で入手し、ココスを使用するためのスプライトシートを作成することができます(輸出業者はcocos2dを選択して適切なplistを作成してください)

1つの大きなテクスチャあなたは、あなたはテクスチャを切り替え

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"your_plist"]; 

であなたのテクスチャを読み込むことができます(zwoptexがあなたのための両方を作成します)のplistでプロジェクトに

を追加することができますので、内のすべての画像を持つ、遅い操作です同じテクスチャは、あなたがspriのテクスチャを変更した後に、OpenGLのパフォーマンスを向上させますteがFRAME_NAMEがPLIST内のフレームの名前です(あなたはXcodeの内のplistを選択することで、それを見ることができます

[yourSprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"FRAME_NAME"]]; 

非常に簡単です。画像を繰り返すことなく、ランダムな方法で、サイクルに

... (私は、私はクラス宣言とインライン実装:)内のINITやら、ここで直接いくつかの擬似コードを記述します)

//WARNING THIS IS PSEUDO CODE :) 

    @interface Randomizer { 
     //an array of NSStrings containing all you images names  
     NSMutableArray *allImagesFrameNames = [NSMutableArray arrayWithCapacity:NUM_FRAMES]; 
CCSprite *sprite = alloc init 
    } 

-(void) resetAllFrames { 
[allImagesFrameNames removeAllobjects]; 

[allImagesFrameName addObject:@"FIRST_IMAGE"]; 
[allImagesFrameName addObject:@"SECOND_IMAGE"]; //add all your images 
} 

@end

とランダムフレームに表示する:

-(void) display a randomImage { 
//if the array is empty, all images are already been randomly displayed, so we reset the array 
if([allImagesFrameName count] == 0) 
[self resetAllFrames]; 

//we choose a random index 
int randomIndex = arc4random %[allImagesFrameName count]; 
//we get the frame name at that index 
NSString *imageFrameName = [allImagesFrameNames objectAtIndex:randomIndex]; 

//and we display the frame 
[sprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:imageFrameName]]; 

[allImagesFrameNames removeObjectAtIndex:randomIndex]; 

} 
+0

おかげであなたUltrakorneを... :)私は同じことを実装し、あなたに戻ってきましょう。私はそれが私のために働くだろうと思う.. – Sarah

関連する問題