Iphone 纹理id未使用相同的id

Iphone 纹理id未使用相同的id,iphone,ios,objective-c,cocos2d-iphone,Iphone,Ios,Objective C,Cocos2d Iphone,上面是错误,下面是我的代码。我现在做的是我有两个不同的plist和png sprite表单文件,它们都包含不同的tile,但是有一个ship和ui。这是在我的加载场景层,基本上在主菜单层,它推一个int,这是级别号,然后加载场景层,它根据级别数量打开精灵表文件。只有当我打开级别1,然后打开级别2,然后返回并打开级别1时,才会崩溃,反之亦然。这已经让人头疼了一段时间,如果您能为我的问题提供帮助,我将不胜感激 Terminating app due to uncaught exception 'N

上面是错误,下面是我的代码。我现在做的是我有两个不同的plist和png sprite表单文件,它们都包含不同的tile,但是有一个ship和ui。这是在我的加载场景层,基本上在主菜单层,它推一个int,这是级别号,然后加载场景层,它根据级别数量打开精灵表文件。只有当我打开级别1,然后打开级别2,然后返回并打开级别1时,才会崩溃,反之亦然。这已经让人头疼了一段时间,如果您能为我的问题提供帮助,我将不胜感激

 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite is not using the same texture id'
*** First throw call stack:
(0x321d22a3 0x39eef97f 0x321d215d 0x32aa7ab7 0x71afd 0x48b61 0xb41cd 0xb1f7d 0xb1e4f 0xb8913 0x4123f 0x40bf5 0x41661 0x3e27f 0x9cf8f 0x9d917 0x9b331 0x33fed5f1 0x33fda801 0x33fda11b 0x35cf05a3 0x35cf01d3 0x321a7173 0x321a7117 0x321a5f99 0x32118ebd 0x32118d49 0x35cef2eb 0x3402e301 0xb0fa3 0x20e8)
libc++abi.dylib: terminate called throwing an exception
(lldb) 
CGSize-winSize=[CCDirector-sharedDirector].winSize;
[[CCSpriteFrameCache sharedSpriteFrameCache]添加SpriteFrameSwithFile:
[NSString stringWithFormat:@“clonespritesheet%d.plist”,加载级别]];
mainship=[Ship spritewithpriteframename:@“mainship.png”];
mainship.position=起始装运位置;
主船速度=10;
[self addChild:mainship z:-4];
joystickright=[操纵杆SpriteWithPriteFrameName:@“uifirebutton.png”];
joystickleft=[操纵杆SpriteWithPriteFrameName:@“uimovementbutton.png”];
joystickleft.up=[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@“uimovementbutton.png”];
joystickleft.down=[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@“UIMovementButtonActivity.png”];
joystickright.up=[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@“uifirebutton.png”];
joystickright.down=[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@“uiFireButtonActivity.png”];
joystickright.position=开始joystickright位置;
joystickleft.position=开始joystickleft位置;
[self addChild:joystickright z:1];
[self addChild:joystickleft z:1];
level1backdrop2.anchorPoint=ccp(0,0);
level1backdrop1.anchorPoint=ccp(0,0);
level1backdrop1=[CCSprite SpriteWithPriteFrameName:@“background.png”];
level1backdrop1.position=ccp(0190);
level1backdrop2=[CCSprite SpriteWithPriteFrameName:@“background.png”];
level1backdrop2.position=ccp(level1backdrop1.boundingBox.size.width-1190);
[self-addChild:level1backdrop1 z:-5];
[self-addChild:level1backdrop2 z:-5];
if(loadlevel==1)
{
level2backdrop2.anchorPoint=ccp(0,0);
level2backdrop1.anchorPoint=ccp(0,0);
level2backdrop1=[CCSprite SpriteWithPriteFrameName:@“backdrop2.png”];
level2backdrop1.position=ccp(0170);
level2backdrop2=[CCSprite SpriteWithPriteFrameName:@“backdrop2.png”];
level2backdrop2.position=ccp(level2backdrop1.boundingBox.size.width-1170);
[self-addChild:level2backdrop1 z:-5];
[self-addChild:level2backdrop2 z:-5];
}
CCSprite*uiscreenbottom=[CCSprite spritewithpriteframename:@“uitemplate.png]”;
[self addChild:uiscreenbottom z:0];
uiscreenbotttom.position=ccp(winSize.width/2,43);
-(无效)加载开始瓷砖//16 x 24
{
[[CCSpriteFrameCache sharedSpriteFrameCache]添加SpriteFrameSwithFile:
[NSString stringWithFormat:@“clonespritesheet%d.plist”,加载级别]];
对于(int i=0;i
在将场景替换到加载级别之前添加以下代码可以修复此问题

     CGSize winSize = [CCDirector sharedDirector].winSize;
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
         [NSString stringWithFormat:@"clonespritesheet%d.plist", loadlevel]];
        mainship = [Ship spriteWithSpriteFrameName:@"mainship.png"];
        mainship.position = startingshiplocation;
        mainship.speed = 10;
        [self addChild:mainship z:-4];

        joystickright = [Joystick spriteWithSpriteFrameName:@"uifirebutton.png"];
        joystickleft =  [Joystick spriteWithSpriteFrameName:@"uimovementbutton.png"];
        joystickleft.up = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uimovementbutton.png"];
        joystickleft.down = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uimovementbuttonactive.png"];
        joystickright.up = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uifirebutton.png"];
        joystickright.down = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uifirebuttonactive.png"];

        joystickright.position = startingjoystickrightlocation;
        joystickleft.position = startingjoystickleftlocation;
        [self addChild:joystickright z:1];
        [self addChild:joystickleft z:1];
        level1backdrop2.anchorPoint = ccp(0,0);
        level1backdrop1.anchorPoint = ccp(0,0);
        level1backdrop1 = [CCSprite spriteWithSpriteFrameName:@"backdrop.png"];
        level1backdrop1.position = ccp(0,190);
        level1backdrop2 = [CCSprite spriteWithSpriteFrameName:@"backdrop.png"];
        level1backdrop2.position = ccp(level1backdrop1.boundingBox.size.width-1,190);
        [self addChild:level1backdrop1 z: -5];
        [self addChild:level1backdrop2 z: -5];
        if(loadlevel == 1)
        {
        level2backdrop2.anchorPoint = ccp(0,0);
        level2backdrop1.anchorPoint = ccp(0,0);
        level2backdrop1 = [CCSprite spriteWithSpriteFrameName:@"backdrop2.png"];
        level2backdrop1.position = ccp(0,170);
        level2backdrop2 = [CCSprite spriteWithSpriteFrameName:@"backdrop2.png"];
        level2backdrop2.position = ccp(level2backdrop1.boundingBox.size.width-1,170);
        [self addChild:level2backdrop1 z: -5];
        [self addChild:level2backdrop2 z: -5];
        }


        CCSprite *uiscreenbotttom = [CCSprite spriteWithSpriteFrameName:@"uitemplate.png"];
        [self addChild:uiscreenbotttom z:0];
        uiscreenbotttom.position = ccp(winSize.width/2,43);


- (void) loadStartingTiles //16 by 24
{
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
     [NSString stringWithFormat:@"clonespritesheet%d.plist", loadlevel]];
     for(int i = 0; i < amountblockslevel1; i++)
    {
        levelframes[i] =[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:
                             [NSString stringWithFormat:@"block%d.png", i]];
    }

    tiles = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"clonespritesheet%d.png", loadlevel]];
    [self addChild:tiles z:-3];


    CCSprite *tempsprite;
    for(int x = 0; x < 26; x++) //minus 1 for one at the begining
    {
        for(int y = 0; y < 16; y++)
        {
            tempsprite = [CCSprite spriteWithSpriteFrame:levelframes[currentscreen[y][x]]];
            tempsprite.position = ccp(x*20+10,(16-y)*20-10); //+10 for align for tile size
            [tiles addChild:tempsprite];
        }
    }

}

希望这对别人有帮助

在将场景替换到加载级别之前添加以下代码可以修复此问题

     CGSize winSize = [CCDirector sharedDirector].winSize;
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
         [NSString stringWithFormat:@"clonespritesheet%d.plist", loadlevel]];
        mainship = [Ship spriteWithSpriteFrameName:@"mainship.png"];
        mainship.position = startingshiplocation;
        mainship.speed = 10;
        [self addChild:mainship z:-4];

        joystickright = [Joystick spriteWithSpriteFrameName:@"uifirebutton.png"];
        joystickleft =  [Joystick spriteWithSpriteFrameName:@"uimovementbutton.png"];
        joystickleft.up = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uimovementbutton.png"];
        joystickleft.down = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uimovementbuttonactive.png"];
        joystickright.up = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uifirebutton.png"];
        joystickright.down = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:@"uifirebuttonactive.png"];

        joystickright.position = startingjoystickrightlocation;
        joystickleft.position = startingjoystickleftlocation;
        [self addChild:joystickright z:1];
        [self addChild:joystickleft z:1];
        level1backdrop2.anchorPoint = ccp(0,0);
        level1backdrop1.anchorPoint = ccp(0,0);
        level1backdrop1 = [CCSprite spriteWithSpriteFrameName:@"backdrop.png"];
        level1backdrop1.position = ccp(0,190);
        level1backdrop2 = [CCSprite spriteWithSpriteFrameName:@"backdrop.png"];
        level1backdrop2.position = ccp(level1backdrop1.boundingBox.size.width-1,190);
        [self addChild:level1backdrop1 z: -5];
        [self addChild:level1backdrop2 z: -5];
        if(loadlevel == 1)
        {
        level2backdrop2.anchorPoint = ccp(0,0);
        level2backdrop1.anchorPoint = ccp(0,0);
        level2backdrop1 = [CCSprite spriteWithSpriteFrameName:@"backdrop2.png"];
        level2backdrop1.position = ccp(0,170);
        level2backdrop2 = [CCSprite spriteWithSpriteFrameName:@"backdrop2.png"];
        level2backdrop2.position = ccp(level2backdrop1.boundingBox.size.width-1,170);
        [self addChild:level2backdrop1 z: -5];
        [self addChild:level2backdrop2 z: -5];
        }


        CCSprite *uiscreenbotttom = [CCSprite spriteWithSpriteFrameName:@"uitemplate.png"];
        [self addChild:uiscreenbotttom z:0];
        uiscreenbotttom.position = ccp(winSize.width/2,43);


- (void) loadStartingTiles //16 by 24
{
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
     [NSString stringWithFormat:@"clonespritesheet%d.plist", loadlevel]];
     for(int i = 0; i < amountblockslevel1; i++)
    {
        levelframes[i] =[[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:
                             [NSString stringWithFormat:@"block%d.png", i]];
    }

    tiles = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"clonespritesheet%d.png", loadlevel]];
    [self addChild:tiles z:-3];


    CCSprite *tempsprite;
    for(int x = 0; x < 26; x++) //minus 1 for one at the begining
    {
        for(int y = 0; y < 16; y++)
        {
            tempsprite = [CCSprite spriteWithSpriteFrame:levelframes[currentscreen[y][x]]];
            tempsprite.position = ccp(x*20+10,(16-y)*20-10); //+10 for align for tile size
            [tiles addChild:tempsprite];
        }
    }

}

希望这对别人有帮助

听起来两个纹理图集中的图像具有相同的(spriteframe)名称,这种歧义可能导致cocos2d引用“错误”帧听起来两个纹理图集中的图像具有相同的(spriteframe)名称,这种歧义可能导致cocos2d引用“错误”帧