0

シーンの読み込み時に、スプライト、サウンドなどのすべてのリソースをプリロードします。しかし、テスト デバイスの 1 つ (HTC Desire、Android 2.2.2) は、読み込み後にリソースをアンロードするため、ゲームがサウンドを再生したりスプライトを描画しようとすると、フリーズします。リソースを再度ロードします。この問題は HTC Desire でのみ発生します。他のデバイス (Samsung Galaxy Ace、Android 2.3.6 & Acer A100 タブ、Android 4.0.3) ではこの問題は発生しませんでした。

なぜこれが起こるのか誰か教えてもらえますか?ありがとう。

これは、リソースをプリロードする方法です。

for (.....)
{
            CCString* file = CCString::create(path.c_str());
            if(file) {
                CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(file->getCString());
            }
}

私もこのように試しましたが、保存結果が得られます:

for (.....)
{
            CCString* file = CCString::create(path.c_str());
            if(file) {
                CCSpriteFrame* frame = new CCSpriteFrame();
                CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFrame(frame, file->getCString());
                frame->retain();
            }
}

どちらの方法でも、 CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo() は、すべてのテクスチャが読み込まれていることを示しています。

01-29 15:18:36.111: D/cocos2d-x デバッグ情報 (7579): cocos2d: CCTextureCache dumpDebugInfo: 53 テクスチャ、103840 KB (101.41 MB)

また、プリロードされたテクスチャの量を 31 (42.76 MB) に減らそうとしましたが、何も変わりませんでした。

PS: 繰り返しますが、この問題は Android OS 2.2 の Desire でのみ発生します ...

4

1 に答える 1

0

この動作の考えられる説明の 1 つは、こちらの「メモリの警告中にキャッシュをパージしないようにする」の下で説明されています。

デフォルトでは、cocos2d (cocos2d-x も例外ではないと思います) は、メモリ警告を受け取るとすべてのキャッシュを消去します。つまり、必要なだけアセットをプリロードできます。必要なメモリ警告は 1 つだけで、プリロードされた (および現在使用されていない) テクスチャはすべてアンロードされます。

于 2013-01-30T15:59:05.217 に答える