0

cocos2d を使用してインタラクティブな電子ブックを作成しています。プログラムを実行すると、最初の読み込み時にのみ表紙のアニメーションが途切れます。このアニメーションは表紙にあり、巨大です。13 のテクスチャ アトラスと 26 の画像のことです。

問題が画像のプリロード/ロードに起因することはわかっていますが、アニメーションが発生する前にすべての画像を既にロードしています。

-(id) init {
     if( (self=[super init]) ) {
               isTouchEnabled_=YES;
    //Pg0 Animations
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A0.plist"];
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A1.plist"];
    ...etc.}}

本書の全体構成は以下の通り。シーン、メニュー レイヤーを作成すると、メニュー レイヤーがさまざまなレイヤー/さまざまなページをプッシュおよびポップします。

カバー ページが読み込まれると (Pg0)、ユーザーが画像に触れると、アニメーションが実行されます。次に、ユーザーがもう一度画像に触れると、2 番目のアニメーションが実行されます。

本のすべての画像がメニュー レイヤーに読み込まれます (つまり、ページがプッシュまたはポップされる前)。これらの画像をシーンまたは個々のページにロードしてプロセスを高速化しようとしましたが、時間には影響しません.

アニメーション ヘルパーを使用してアニメーションを実行しています。アニメーション ヘルパーは、画像をループします。

必要に応じて、プロジェクトに関するコードや情報をさらに共有したいと思います。

4

3 に答える 3

1

cocos2D v3.1 iphone でこの問題が発生しました。キャッシュされたスプライトシートがありましたが、ロード中にまだ途切れていました。別の投稿のどこかで、初期ラグを取り除くためにテクスチャ自体もロードする必要があることを発見しました。これは、キャッシュ スプライト メソッドで行ったことです。

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist"];
CCTexture *temporaryLoadTexture = [CCTexture textureWithFile:@"spritesheet.png"];

ダミーの CCTexture ファイルをロードするだけで、初回アニメーションとスプライト ラグがすべて解消されました。お役に立てれば!

于 2014-09-01T04:08:16.623 に答える
1

同じ問題があります。cocos2d v0.9 使用時のアニメーションは問題なく、遅延はありませんでした。cocos2d v2.0に移行するとラグが発生します。

cocos2d v0.9ではキャッシュにスプライトを追加すると(addSpriteFramesWithFile:(NSString*)plist) texture2dも作成される(CCSpriteFrameCache.m:238)が、cocos2d v2.0ではtextture2dの作成がなく、初回使用時にテクスチャが作成されるCCSpriteFrame. 追加することで修正します

[[CCTextureCache sharedTextureCache] addImage:textureFileName]; 

CCSpriteFrameCache.m:207 (v2.0) で

于 2013-08-29T08:15:48.227 に答える
0

AppDelegate がメモリ警告メソッドを実装しているかどうかを確認してください。そのメソッドが何をするかを確認してください。

デフォルトでは、cocos2d はそのメソッドを実装し、すべてのキャッシュをパージします。テクスチャのプリロード中にそれがトリガーされると、メモリ警告が受信されたにもかかわらずプリロードされたテクスチャがまだ使用されていないため、cocos2d がプリロードされたテクスチャを削除します。Cocos2d はそれらを「未使用」と見なし、メモリから削除します。つまり、次にそのテクスチャを使用するときは、ディスクから再度ロードする必要があります。

この問題とその解決方法について説明するブログ投稿を書きました。最も重要なこと: TexturePacker を取得し、テクスチャ アトラスには .pvr.ccz のみを使用します。可能であれば、テクスチャの色深度を 16 ビットに減らすようにしてください。また、テクスチャ メモリの使用量をダンプして、実際に使用しているメモリ量と、そのメモリ量が妥当な制限内にあるかどうかを確認してください。サポートしている可能性のあるメモリが少ない古いデバイスを含めます。

于 2012-12-17T23:16:47.620 に答える