CCSpriteFrameCache还是CCSprite? - Cocos2d

时间:2011-05-02 22:16:50

标签: iphone cocos2d-iphone

我正在制作我的第一个游戏,到目前为止,我唯一的问题是内存使用情况(我没有支付开发者费用,所以我在模拟器中运行它)。到目前为止它占用了大约23MB,从我读到的这个到目前为止。这是真的?首先,在我的主菜单中,我最大的问题是我的背景,它占用了2MB +的内存。这可以吗?其次,我的gamecene的背景也占用了2MB +。这可以吗?第三,我有2个CCSpriteFrameCaches,一个有55个.PNG文件,另一个有12个。带有55个图像的那个占用大约9MB的内存。这听起来不正常吗?第二个占用大约3MB。这听起来不正常吗?

在按下按钮之前,55个图像不会添加到图层中(然后占用更多的内存大约7MB,不知道为什么)。然后,当按下第二个按钮时,移除第一个图像并添加第二个图像。然后,当再次按下第一个按钮时,移除第二个图像并添加第三个图像(依此类推,因此第四个)。我的问题是使用CCSpriteFrameCache或CCSprite会更好吗?或者是否有某种替代方案。

如果有人有更好的方法,请告诉我。非常感谢任何帮助!

示例代码:

-(void)buttons:(CGPoint)touchLocation {
if (CGRectContainsPoint(leftB.boundingBox, touchLocation) && tapP == YES && paused == NO) {
    if (count == 1)
    {
        isBOP = YES;
        count = 2;
    } else if (count == 3)
    {
        [bspriteSheet removeChild:_b cleanup:YES];
        [pspriteSheet removeChild:_p cleanup:YES];

        _p = [CCSprite spriteWithSpriteFrameName:@"p3.png"];
        [pspriteSheet addChild:_p];
        count = 4;
        _p.position = ccp(240, 215);

        _b = [CCSprite spriteWithSpriteFrameName:@"b2.png"];
        _b.position = ccp(240, 158);
        [bspriteSheet addChild:_b];
    }
if (CGRectContainsPoint(rightB.boundingBox, touchLocation) && tapP == YES && paused == NO) {
    if (count == 2)
    {
        [self removeChild:gb cleanup:YES];
        [pspriteSheet removeChild:_p cleanup:YES];

        _p = [CCSprite spriteWithSpriteFrameName:@"p2.png"];
        _p.position = ccp(240, 215);
        [pspriteSheet addChild:_p];

        _b = [CCSprite spriteWithSpriteFrameName:@"b1.png"];
        _b.position = ccp(240, 158);
        [bspriteSheet addChild:_b];

        count = 3;
    } else if (count == 4)
    {
        [bspriteSheet removeChild:_b cleanup:YES];
        [pspriteSheet removeChild:_p cleanup:YES];

        _p = [CCSprite spriteWithSpriteFrameName:@"p4.png"];
        [pspriteSheet addChild:_p];
        count = 5;
        _p.position = ccp(240, 215);

        _b = [CCSprite spriteWithSpriteFrameName:@"b3.png"];
        _b.position = ccp(240, 158);
        [bspriteSheet addChild:_b];
    }

1 个答案:

答案 0 :(得分:0)

查看最佳实践文档......他们有很多关于您所遇问题的详细信息。

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:best_practices

考虑为大图像使用其他图像格式。使用PVRTC文件会大大减少内存使用量。