Ios Cocos2d:大背景导致内存泄漏和崩溃

Ios Cocos2d:大背景导致内存泄漏和崩溃,ios,memory-management,background,cocos2d-iphone,Ios,Memory Management,Background,Cocos2d Iphone,我正在开发一个大背景的游戏,背景由十幅图片组成。当 游戏中的塔越高,背景越向下滚动。我以这种方式构建背景: layer.backgroundLayer = [CCLayer node]; layer.backgroundLayer.anchorPoint = ccp(0, 0); CCSprite *background = nil; CCTexture2D *mytexture = nil; NSString *temp = nil; UIImage *myimage = nil; for (

我正在开发一个大背景的游戏,背景由十幅图片组成。当
游戏中的塔越高,背景越向下滚动。我以这种方式构建背景:

layer.backgroundLayer = [CCLayer node];
layer.backgroundLayer.anchorPoint = ccp(0, 0);
CCSprite *background = nil;
CCTexture2D *mytexture = nil;
NSString *temp = nil;
UIImage *myimage = nil;
for (int i=0; i < 9; i++) {

    temp = [NSString stringWithFormat:@"bg_0%d.jpg",10-i];
    if (i == 0) {
        temp = [NSString stringWithFormat:@"bg_%d.jpg",10-i];
    }
    myimage = [UIImage imageNamed:temp];
    mytexture = [[CCTexture2D alloc] initWithImage:myimage];

    background = [CCSprite spriteWithTexture:mytexture rect:CGRectMake(0,0,640,2000)];
    background.anchorPoint = ccp(0.0,0.0);
    [background setPosition:CGPointMake(0.0,1000.0 * i-4)];
    [background setScaleX: 0.5];
    [background setScaleY: 0.5];

    //[background setPosition:CGPointMake(0.0,0.0)];

    [layer.backgroundLayer addChild:background];

}
[scene addChild:layer.backgroundLayer z:-1];
layer.backgroundLayer=[CCLayer节点];
layer.backgroundLayer.anchorPoint=ccp(0,0);
CCSprite*背景=nil;
CCTexture2D*mytexture=nil;
NSString*temp=nil;
UIImage*myimage=nil;
对于(int i=0;i<9;i++){
temp=[NSString stringWithFormat:@“bg_0%d.jpg”,10-i];
如果(i==0){
temp=[NSString stringWithFormat:@“bg_%d.jpg”,10-i];
}
myimage=[UIImage ImageName:temp];
mytexture=[[CCTexture2D alloc]initWithImage:myimage];
背景=[CCSprite spriteWithTexture:mytexture rect:CGRectMake(0,06402000)];
background.anchorPoint=ccp(0.0,0.0);
[背景设置位置:CGPointMake(0.01000.0*i-4)];
[背景设置比例:0.5];
[背景设置比例:0.5];
//[背景设置位置:CGPointMake(0.0,0.0)];
[layer.backgroundLayer addChild:background];
}
[scene addChild:layer.backgroundLayer z:-1];
在滚动bg 5或6次后,游戏崩溃。有没有办法优化bg。 注:一张bg图像的尺寸是235ko


在创建时没有内存问题。滚动时,内存的使用变得很重要。

释放myTexture(我想)。你用的是ARC吗?嗨,伊夫,谢谢你的回答,但是没有用,内存的使用率仍然很高。你在哪里创建这些背景?是在init方法中还是在onEnter方法中?另外,尝试使用纹理打包工具()使用pvr纹理,而不是使用.jpg。使用.jpg对内存没有帮助,因为图像在加载时会被解压缩。使用带有pvr纹理的PVRTC4作为背景是更好的选择。感谢pvr的建议,我正在使用返回场景的方法创建背景@伊夫:释放纹理真的很有帮助:)。pvr只会增加加载速度,而不会增加内存。一个像素就是一个像素就是一个像素。您可以这样做:[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444]。这将大大减少内存。加载前设置为4444,加载后立即返回8888。如果纹理没有透明度,请使用kCCTexture2DPixelFormat_RGB565而不是4444(每像素16位,更好的颜色渲染)。