2016-02-09 2 views
0

У меня есть игра с использованием комплекта спрайтов и объектива-C, первоначально разработанного с использованием Xcode 6 и iOS 7, но теперь она падает на устройствах iOS 9.Сценарий SpriteKit Obj C в iOS 9

Аварийная ситуация возникает, когда пользователь переходит от одного уровня к другому, и к сцене добавляется новый горизонтальный фон прокрутки (SKNode).

Исключение:

резьбы 1 EXC_BAD_ACCESS (код = 1, адрес = 0x0)

Добавление горизонтальной прокрутки фона на сцене, когда изменение уровня:

// Array of planets to scroll 
NSArray *parallaxBackgroundNames = @[@"bg_galaxy.png", @"bg_planetsunrise.png", 
            @"bg_spacialanomaly.png", @"bg_spacialanomaly2.png"]; 
CGSize planetSizes = CGSizeMake(200.0, 200.0); 


// Initialize new back round scrolling node and ad to scene 
_parallaxNodeBackgrounds = [[FMMParallaxNode alloc] initWithBackgrounds:parallaxBackgroundNames 
                    size:planetSizes 
                pointsPerSecondSpeed:10.0]; 

// Position in center of screen 
_parallaxNodeBackgrounds.position = CGPointMake(self.size.width/2.0, self.size.height/2.0); 

// Method to randomly place planets as offsets to center of screen 
[_parallaxNodeBackgrounds randomizeNodesPositions]; 

// EXCEPTION THROWN HERE when adding it to the layer 
[self addChild:_parallaxNodeBackgrounds]; 

_parallaxNodeBackgounds - SKSNode экземпляр FMMParallaxNode, инициализированный как:

- (instancetype)initWithBackgrounds:(NSArray *)files size:(CGSize)size pointsPerSecondSpeed:(float)pointsPerSecondSpeed 
{ 
    if (self = [super init]) 
    { 
     _pointsPerSecondSpeed = pointsPerSecondSpeed; 
     _numberOfImagesForBackground = [files count]; 
     _backgrounds = [NSMutableArray arrayWithCapacity:_numberOfImagesForBackground]; 
     _randomizeDuringRollover = NO; 
     [files enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
      SKSpriteNode *node = [SKSpriteNode spriteNodeWithImageNamed:obj]; 
      node.size = size; 
      node.anchorPoint = CGPointZero; 
      node.position = CGPointMake(size.width * idx, 0.0); 
      node.name = @"background"; 
      //NSLog(@"node.position = x=%f,y=%f",node.position.x,node.position.y); 
      [_backgrounds addObject:node]; 
      [self addChild:node]; 
     }]; 
    } 
    return self; 
} 

Внесение каких-либо изменений в причину возникновения аварии.

EDIT: Мое понимание этого исключения заключается в том, что оно выбрасывается, если указатель указывает на память, которая была освобождена или указатель поврежден.

У меня нет ошибок, связанных с этим объектом при создании и анализе в Xcode, и я также создал новый указатель локально (исходный указатель - это экземпляр var), но по-прежнему получает ту же ошибку.

+0

у вас есть циклическая ссылка происходит здесь, так что ваш FMMParallaxNode Никогда не deallocs, вам нужно добавить [бесхозный самостоятельно] в начале вашего блока – Knight0fDragon

+0

Спасибо, я буду попробуй позже. Я попытался выпустить объект, но ошибка, вызванная компилятором, указала, что это не разрешено. Любая идея, почему это проблема только в ios9? – dancingbush

+0

Более жесткие ограничения на 9, возможно, – Knight0fDragon

ответ

1

ли слабая ссылка, как это:

- (instancetype)initWithBackgrounds:(NSArray *)files size:(CGSize)size pointsPerSecondSpeed:(float)pointsPerSecondSpeed 
{ 
    if (self = [super init]) 
    { 
     __weak FMMParallaxNode *weakSelf = self; 
     _pointsPerSecondSpeed = pointsPerSecondSpeed; 
     _numberOfImagesForBackground = [files count]; 
     _backgrounds = [NSMutableArray arrayWithCapacity:_numberOfImagesForBackground]; 
     _randomizeDuringRollover = NO; 
     [files enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
      SKSpriteNode *node = [SKSpriteNode spriteNodeWithImageNamed:obj]; 
      node.size = size; 
      node.anchorPoint = CGPointZero; 
      node.position = CGPointMake(size.width * idx, 0.0); 
      node.name = @"background"; 
      //NSLog(@"node.position = x=%f,y=%f",node.position.x,node.position.y); 
      [_backgrounds addObject:node]; 
      [weakSelf addChild:node]; 
     }]; 
    } 
    return self; 
} 
+0

Спасибо за помощь, ссылка cir и дефект дизайна были проблемой, исправленной сейчас – dancingbush

Смежные вопросы