0

CCSpriteBatch ノードからテクスチャ アトラスを切り替える必要があります。私が選んだアプローチは、プレイ可能なキャラクターが特定の X 軸 (700) に到達した後、ゲームがそれを変更するというものです。

視覚的には正常に動作しますが、問題は、変更中に画面が2〜3秒間フリーズし、コンソールでメモリ警告が表示されることです。

CCSpriteBatchNode を切り替える適切な (最も軽い) 方法はどうすればよいのか疑問に思うのは、私だけではないと思います。

以下の現在の切り替えコードを参照してください。

if(mainCharacter.x > 700)
{
    //NSLog(@"switch!");

    float oldHeroX, oldHeroY;

    oldHeroX = mainCharacter.x;
    oldHeroY = mainCharacter.y;

    [_myBatchNode removeChild:mainCharacter];
    [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:texturePList1];
    [self removeChild:_myBatchNode];



    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:texturePList2];
    _myBatchNode = [CCSpriteBatchNode batchNodeWithFile:texturePNG2];
    [_myBatchNode.texture setAliasTexParameters];
    [self addChild: _myBatchNode z:-6];

    //this is just a method that starts the playable character sprite and add to batch node and layer
    [self startCharacter:oldHeroX :oldHeroY];
}

ありがとう

4

1 に答える 1

1

私は概して、「その場で」ロードすることを避ける傾向があります。つまり、シーン (またはカットシーン) を開始する前、通常はトランジション中に、すべてのテクスチャをプリロードします。スタックした場合、その場でロードする必要があります (プリロードされたテクスチャのメモリ フットプリントが高すぎるため)。pvr テクスチャ (圧縮されていない) を使用し、バンドル サイズを犠牲にして、ロード速度とロード中のメモリ使用量を増やします。YMMV、個々のテクスチャのサイズに応じて、「その場で」切り替える必要があります。

また、スプライトまたはアニメーションのみが必要な場合は、バッチ ノードを使用しないでください。何も得られませんが、クリーンアップと解散にはコストがかかります。

于 2014-04-10T17:52:11.867 に答える