【问题标题】:CCSpriteFrameCache or CCSprite? - Cocos2dCCSpriteFrameCache 还是 CCSprite? - Cocos2d
【发布时间】:2011-07-29 13:22:22
【问题描述】:

我正在制作我的第一个游戏,到目前为止我唯一的问题是内存使用(我没有支付开发人员费用,所以我在模拟器中运行它)。到目前为止,它占用了大约 23MB,从我读过的内容来看,这已经很多了。这是真的?首先,在我的主菜单中,我最大的问题是我的背景,它占用了 2MB 以上的内存。那样行吗?其次,我的游戏场景中的背景也占用了 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];
    }

【问题讨论】:

  • 只是一个提示,对不需要清晰或高分辨率的精灵使用 pvr 图像格式,因为它们占用的内存更少。祝你的第一场比赛好运! :)

标签: iphone cocos2d-iphone


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多