2009-06-17 5 views
0

私はxcodeで長い時間アニメーションを設定しようとしていましたが、最初は1000個の1000x1000のアニメーションをアニメーション化しようとしましたが、今は100の320x480のPNGをアニメーション化しようとしていますが、それは約40フレームになるまでうまくアニメートするようですが、アプリがクラッシュするので、これをしないアニメーションの方法はありますか?それはおそらく、このコードは、iPhoneの処理のためにあまりにも多くの画像を読み込むため、私はクラッシュを停止するには、アプリケーションを取得するために使用できるいくつかの他の方法はありますか?または、この コードをさらに最適化できますか? は(ちなみに私が答えるときに心に留めておくiphoneプラットフォームに新たなんだ)iPhone SDK: "animationImages"問題を伴う長いアニメーション

- (IBAction)startClick1:(id)sender{ 

spud123.animationImages = [NSArray arrayWithObjects: 
          [UIImage imageNamed: @"spud1230000.png"], 
          [UIImage imageNamed: @"spud1230001.png"], 
          [UIImage imageNamed: @"spud1230002.png"], 
          [UIImage imageNamed: @"spud1230003.png"], 
          [UIImage imageNamed: @"spud1230004.png"], 
          [UIImage imageNamed: @"spud1230005.png"], 
          [UIImage imageNamed: @"spud1230006.png"], 
          [UIImage imageNamed: @"spud1230007.png"], 
          [UIImage imageNamed: @"spud1230008.png"], 
          [UIImage imageNamed: @"spud1230009.png"], 
          [UIImage imageNamed: @"spud1230010.png"], 
          [UIImage imageNamed: @"spud1230011.png"], 
          [UIImage imageNamed: @"spud1230012.png"], 
          [UIImage imageNamed: @"spud1230013.png"], 
          [UIImage imageNamed: @"spud1230014.png"], 
          [UIImage imageNamed: @"spud1230015.png"], 
          [UIImage imageNamed: @"spud1230016.png"], 
          [UIImage imageNamed: @"spud1230017.png"], 
          [UIImage imageNamed: @"spud1230018.png"], 
          [UIImage imageNamed: @"spud1230019.png"], 
          [UIImage imageNamed: @"spud1230020.png"], 
          [UIImage imageNamed: @"spud1230021.png"], 
          [UIImage imageNamed: @"spud1230022.png"], 
          [UIImage imageNamed: @"spud1230023.png"], 
          [UIImage imageNamed: @"spud1230024.png"], 
          [UIImage imageNamed: @"spud1230025.png"], 
          [UIImage imageNamed: @"spud1230026.png"], 
          [UIImage imageNamed: @"spud1230027.png"], 
          [UIImage imageNamed: @"spud1230028.png"], 
          [UIImage imageNamed: @"spud1230029.png"], 
          [UIImage imageNamed: @"spud1230030.png"], 
          [UIImage imageNamed: @"spud1230031.png"], 
          [UIImage imageNamed: @"spud1230032.png"], 
          [UIImage imageNamed: @"spud1230033.png"], 
          [UIImage imageNamed: @"spud1230034.png"], 
          [UIImage imageNamed: @"spud1230035.png"], 
          //and so on to 100 
          nil]; 

[spud123 setAnimationRepeatCount:1]; 
spud123.animationDuration =5.7; 
[spud123 startAnimating]; 

}

シモンズ:Iv'eはNSTimerを試してみましたが、私はそれが繰り返し停止することができませんアニメーション

+1

Whoa!各ファイルのファイル名を生成し、実行時に配列を生成するには何らかの方法があるはずです。これは多くの型付け/コピー・ペーストを省き、そのような無意味なコードを作成しません。 – schnaader

+0

ええ、実際にアニメーションを作ったときにコードを設定して作業していますが、私はあなたの意見を見ています。 – Amanda

+0

これはdupのようです:http://stackoverflow.com/questions/992770/whats-the-easiest-frame-by-frame-animation-technique-in-the-iphone-sdk/5956713#5956713私のポストを参照してください最適解についての上記の質問で。 –

答えて

4

これはアニメーション上の問題ではなく、デザイン上の問題です。

最初に、ステップ・アタックを実行し、アプリケーションのメモリー要件を計算してください。 圧縮解除時に、それぞれのPNGは614400バイトを使用します。だから、そのうち100は61440000バイトを使用します.60メガバイトを超えています。それは電話から少し期待しています。

フレームごとに異なる画像を表示する必要がある場合は、動画を使用する必要があります。ビデオには、多数の大きな画像を連続して表示するときに、画像を圧縮し、処理およびメモリの要件を削減する多くの技術があります。

これをもっと細かく制御するアニメーションにする必要がある場合は、動くものを分析し、アニメーション化する必要があることをお勧めします。単一の背景を描画し、その上に小さな画像をアニメーションします。

最後に、このアプローチがうまくいかない場合は、必要なパフォーマンスを達成するためにはlearn OpenGLにする必要があります。

あなたのアプリについて詳しく知ることなく、アドバイスするのは難しいです。

+0

を使用します。ビデオを使用しても構いませんが、トランスペアレントビデオである必要があります。ビデオ実装に関する有用なチュートリアルを知っていますか? OpenGLを学ぶことがどれほど難しいと思いますか? OpenGLに関するアニメーションチュートリアルはありますか?そしてあなたは私が電話からあまりにも多くを求めていると言います、私は他の開発者がもっと複​​雑なアニメーションを自分のアプリに実装しているのを見ました。とにかくアドバイスをいただきありがとうございます。 – Amanda

+0

あなたはアプリから得たい効果のようなものを人々が見たことがあるかもしれませんが、UIImageアニメーションとして100のフルスクリーン画像を表示していないことが分かりました。 –

+0

Hey Roger Nolan、 私のpngは320 x 480で約75フレームほどですが、同様の問題があります。私はpvrに圧縮しようとしましたが、それは非常に損失でした。これまで使用価値がない 私の現在のPNGのサイズは、一度openGLに持ち込まれると約78mbsです。私はこれを下げるのにどのくらいの大きさが必要なのか不思議です。 すべて、 keuminotti – keuminotti

0

多くの場合、アニメーションのフレームは非常に似ています。だから1つの潜在的な解決策は、いくつかの画像を読み込んでから、OpenGLを使ってアニメーションを作成することです。これは、ボールが飛び跳ねるようにうまく動作します。どの画像をアニメートしているのかわかりません。

+0

飛び散らないでください、空中に投げられているバトンをアニメーションすると、バトンは異なる角度を持ち、約75フレームのpngです。 2つのセットがあります。そのうちの1つは背景で、次に一連のトランスです。バトンのpngs。私は何点、何フレームで何が起こっているのか不思議に思っています。 – keuminotti

+0

OpenGLでかなり簡単に実行できるようなサウンドです。一般的なアプローチは、レンダーシーンを呼び出すたびに背景を描画し、特定の角度と高さでバトンを描画します(どちらも時間の経過と共に変化します) – MrDatabase

2

あなたのアプリケーションのメモリ使用量は注意深く考慮する必要がありますが、そのオプションを知っているので、私はhttp://www.modejong.com/iPhone/PNGAnimatorDemo.zipに基づいて修正されたクラスを使用しました。これは第1世代のiPadハードウェアではフルスクリーン15fps(1024x768) pngアニメーション。しかし、アプリケーションバンドルのサイズに注意してください。これは間違いなくほとんどのアプリケーションにとって最良の選択肢にはなりません。

関連する問題