0

私はゲームに取り組んでおり、メニューで使用できるように各レベルのサムネイルを作成したいと考えています。私はこのように CCRenderTexture でこれを行います:

CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:bounds.size.width height:bounds.size.height];
ScreenShotLayer *scene = [[ScreenShotLayer alloc] init];
[renderer begin];
[scene visit];
[renderer end];

[renderer saveToFile:[NSString stringWithFormat:@"level%@.png", level.levelId] format: kCCImageFormatPNG];

これはすべてうまく機能し、イメージは保存されますが、大量のメモリを占有し、決して解放されません。このデータを保存しないと、私のゲームは 8 MB の RAM を必要とします。画像を保存すると、430 MB 以上かかります。

すべてを同じままにしてsaveToFile呼び出しをコメントアウトすると、8 MB のメモリ使用量に戻ります。これをleaksツールでデバッグしましたが、リークは見つかりませんでした。

これはフレームワークの問題ですか?これを処理するより良い方法はありますか?私は何かばかげたことをしていますか?

私のゲーム全体はオープンソースであり、 https://github.com/zgrossbart/bridgesで入手できます。このコードはLevelMgr.mmで発生します。

助けてくれてありがとう、

ザック

4

1 に答える 1

0

Cocos2d フォーラムでこの問題の解決策を見つけ、コードを少し調べてみました。彼女のフォーラム投稿を読むことができます:

http://www.cocos2d-iphone.org/forum/topic/48890

まだ CCRenderTexture が少しメモリ リークを起こしているのがわかります。Cocos2d チームはこれをテストし、2.1-beta で動作していると述べています。また、コードのパフォーマンスを大幅に改善することもできました。

Cocos2d シーンのサムネイル画像を作成するために CCRenderTexture を使用していました。CCRenderTexture を使用してフルサイズの画像を作成し、特別な UIImage を使用して画像のサイズ変更とトリミングを行いました。最終的に必要なサイズの CCRenderTexture を作成し、Cocos2d シーンを最終的に必要なサイズにスケーリングする方がはるかに効率的です。

于 2012-11-01T13:40:02.763 に答える