缓存精灵来保存内存

时间:2012-04-18 14:31:35

标签: caching cocos2d-iphone sprite

在我的游戏场景中,我在CCParallaxNode中使用5个背景图像(精灵),我必须使用每个精灵两次才能永久移动所有这些图层。如何缓存这些精灵来保存内存?

我只想逃离 CCSprite * for _level_1 CCSprite * for _level_2 ,因为它只是两次相同的图像。

_backgroundNode = [CCParallaxNode node];
_backgroundNode.anchorPoint = CGPointMake(0, 0);
_backgroundNode.position = CGPointMake(0, 0);
[self addChild:_backgroundNode z:-1];

.....

循环

            CCSprite *fon_level_1 = [CCSprite spriteWithFile:[NSString stringWithFormat:@"%@", name]];
            CCSprite *fon_level_2 = [CCSprite spriteWithFile:[NSString stringWithFormat:@"%@", name]];
            fon_level_1.anchorPoint = CGPointMake(0, 0);
            fon_level_1.position = CGPointMake(0, 0);
            fon_level_2.anchorPoint = CGPointMake(0, 0);
            fon_level_2.position = CGPointMake(0, 0);
            [_backgroundNode addChild:fon_level_1 z:zIndex parallaxRatio:ccp(ratio, ratio) positionOffset:ccp(offsetx, offsety*screenSize.height)];
            [_backgroundNode addChild:fon_level_2 z:zIndex parallaxRatio:ccp(ratio, ratio) positionOffset:ccp(fon_level_1.contentSize.width, offsety*screenSize.height)];
            [_backgrounds addObject:fon_level_1];
            [_backgrounds addObject:fon_level_2];

方法,其中移动fons并检查实现背景图层的结束

-(void) updateBackgroud:(ccTime)delta
{
    CGPoint backgroundScrollVel = ccp(-1000, 0);

    _backgroundNode.position = ccpAdd(_backgroundNode.position, ccpMult(backgroundScrollVel, delta));

    for (CCSprite *background in _backgrounds) {
        if (([_backgroundNode convertToWorldSpace:background.position].x+background.contentSize.width/10) < -(background.contentSize.width)) {
            [_backgroundNode incrementOffset:ccp(background.contentSize.width*2,0) forChild:background];
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您应该只将纹理添加到纹理缓存一次,CCSprite实例不会复制纹理。它只存储一个指向纹理和框架参数(原点和大小)的指针,以便知道要使用的纹理部分(例如,如果你有一个包含大量精灵的大图册)。

实际上,您可能不会直接将纹理添加到纹理缓存中。它将被添加到CCSprite实例init方法中的纹理缓存中。