0

ここにあるような iPad2 用の簡単なアニメーションを作成するタスクがあります: http://www.subaru.jp/legacy/b4/index2.html

ユーザーは左右にスライドするだけで、オブジェクトは垂直軸で視覚的に回転します。これを行う最も簡単な方法は、cocos2d の UIImage または CCSprite を使用し、画像で配列を設定し、タッチに応じて画像を変更することだと思います。画像のサイズは 1024x768 (フル スクリーン) で、アニメーションをよりスムーズにするために 1 秒あたり少なくとも 15 ~ 20 枚の画像が計画されています。質問: この方法でこれを本当にスムーズに行うことは可能ですか? そんなことでiPad2の本当の限界って何だろう。そして、それが境界の背後にある場合、どうすればこの動作を他の方法で実現できますか?

4

2 に答える 2

2

では、計算してみましょう:

毎秒 1024x768 の画像を 15 回。4096x4096 のテクスチャ アトラスを使用すると、それらすべてを 1 つのテクスチャ アトラスに入れることができます。それは1秒をカバーします。

つまり、毎秒別のテクスチャ アトラスをロードする必要があります。このようなテクスチャ アトラスは、多くてもメモリ内に 2 ~ 3 個持つことができます (控えめに言って、それぞれが 64 MB のメモリを使用します)。

これを実現する唯一の方法は、.PVR.CCZ テクスチャ アトラスを使用して読み込み時間を増やし、メモリ使用量を減らすことです。テクスチャ アトラスを頻繁に (数秒以内に) ロード/アンロードする必要があります。そのため、4k .PVR.CCZ テクスチャの読み込み速度と、それが速度に影響するかどうかをテストする必要があります。

それが遅すぎる場合 (私はそうなると思います)、1024x1024 の .pvr.ccz テクスチャ (単一フレーム) を使用し、CCTextureCache 非同期メソッドを使用して事前に 4 つ以上をキャッシュし続ける必要があります (そしてテクスチャをアンキャッシュします)新しいテクスチャの読み込みがバックグラウンドで行われ、アニメーションの速度に影響を与えないようにします。

これは回転に関するものなので、いずれかの方向に少なくとも 1 つ、できれば 2 つのフレームがキャッシュにあることを確認する必要があります。回転はさまざまな速度で発生する可能性があるため、ユーザーは依然として遅延を経験する可能性があります。

画質に影響が大きくなるまで、テクスチャのカラー ビット深度を可能な限り減らす必要があります。

本のすべてのトリックを適用すれば、それは実行可能だと確信しています. しかし、それは「アニメーションを再生する」という単純なものではありません。それが知りたかったのなら。

于 2013-03-19T12:28:55.793 に答える
1

私は以前にこのようなことをしましたが、UIWebViewコントロールでJSライブラリを使用すると、ライブラリ名はUIZEになります。このを確認してください。サイズ1024×655の約100枚の画像で使用しましたが、とてもスムーズです。

サイズからライブラリをダウンロードし、フォルダを次のように整理します。

  • rotation3d
      • 3d-rotation-viewer.html
  • 画像
    • 画像ファイル
  • js
    • ライブラリファイル。

Objective-Cクラスで、次のコードを使用してUIWebViewにhtmlページをロードします。

NSString *path = [[NSBundle mainBundle]
                  pathForResource:@"3d-rotation-viewer"
                  ofType:@"html"
                  inDirectory:@"rotation3d/example" ];

NSURL *urls = [NSURL fileURLWithPath:path];

NSString *theAbsoluteURLString = [urls absoluteString];

NSString *queryStrings = @"?param1=something";//Parameters to pass to your html page

NSString *absoluteURLwithQueryString = [theAbsoluteURLString stringByAppendingString: queryStrings];  

NSURL *finalURL = [NSURL URLWithString: absoluteURLwithQueryString];

NSURLRequest *request = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0 ];

[webViews loadRequest:request];
于 2013-03-19T10:54:14.737 に答える