1

勝ち状態と負け状態があるゲームを作っています。状態ごとに、2 ~ 3 秒の短いアニメーションを表示したいと思います。最初のアニメーションは 60 個の PNG で構成され、レートは 30 fps であり、2 番目のアニメーションは 80 個の PNG で構成され、同じく 30 fps です。私はさまざまな方法を試し、解決策を広範囲に検索しましたが、見つけ続けている上位 2 つの結果は、UIImageView animationImages と Core Animation を使用することです。UIImageView を使用すると、シミュレーターで非常にうまく機能しますが、デバイスで初めて実行するのに非常に時間がかかります。これは、画像をメモリにロードする必要があるためだと思います。「imageNamed」を使用して animationImages 配列を設定していますが、アニメーションが初めて呼び出されたときにレンダリングする必要があると思いますか? アプリの読み込み時にそれらを事前にレンダリングしようとしましたが、これでうまくいくようです。しかし、これらすべての画像を事前にレンダリングするには 10 秒近くかかり、ユーザー フレンドリーではありません。Core Animation の使用も歓迎しますが、それについての知識は非常に限られているため、詳細な説明をいただければ幸いです。ありがとう!

アプリの起動時にすべてをロードする必要があると言うとき、正確にはどういう意味ですか? 現時点では、アプリの読み込み時にアニメーション イメージの両方の配列を次のように初期化します。

// Create thinnestAnimation Array
thinnestAnimation = [[NSMutableArray alloc] init];
for(int i = 1; i <= 60; i++)
{
    UIImage *thinImage = [UIImage imageNamed:[NSString stringWithFormat:@"ThinnestJump_%d.png", i]];
    [thinnestAnimation addObject:thinImage];
}

thinAnimationImageView.animationImages = (NSArray *)thinnestAnimation;
thinAnimationImageView.animationDuration = 2.0;
thinAnimationImageView.animationRepeatCount = 1;

thinAnimationImageView は私のインターフェイスの IBOutlet であり、[thinAnimationImageView startAnimating];画像のシーケンスをアニメーション化するときに呼び出します。これは最初の呼び出しで大幅に遅れますが、その後は問題ありません。初めて遅れるのを防ぐ方法はありますか?

4

4 に答える 4

1

アンドリュースが述べたように、UIImageViewにはアニメーションのプロパティが組み込まれています

画像の配列(imgarray)と画像ビューがあるように

画像の配列を作成するため

NSMutableArray *imgarray = [NSMutableArray arrayWithCapacity:100]
for (int i = 0; i < 100; ++i) {
  NSString *name = [NSString stringWithFormat:@"img%d.png",i];
  UIImage *image = [UIImage imageNamed:name];
  [imgarray addObject:image];
}

続いてアニメ化へ

UIImageView *imgview;

imgview.animationimages=imgarray;

次に設定します

 imgview.animationDuration=2.0;  //in seconds

     [imgview startAnimating];

アニメーションを停止する stopanimation と、アニメーションの繰り返し回数のプロパティもあります

お役に立てれば.....

于 2012-08-13T07:08:28.770 に答える
1

UIImageViewの組み込みのアニメーション機能は、それを行う良い方法です。ただし、アプリの起動時など、アニメーション化が必要になる前にすべてを読み込む必要があります。複数の異なるアニメーションを準備する必要がある場合は、起動時に複数の UIImageView オブジェクトをロードし、後で必要なアニメーションをそのstartAnimatingメソッドで呼び出します。

アニメーションに OpenGL を使用する Cocos2D を使用するなど、アニメーション化する他の方法もあり、パフォーマンスがはるかに高速です。しかし、別のフレームワークでアプリを完全にビルドすることになり、アプリで他に何が起こっているかによってはやり過ぎになる可能性があります。

于 2012-08-13T06:21:55.650 に答える
0

CALayerを使用してスプライトシートでアニメーションを作成する方法については、この記事を確認してください。レイヤーは、スプライトシートよりもオーバーヘッドが少なくなります。

于 2012-12-21T17:55:28.423 に答える