2014-01-24 2 views
1

Я пытаюсь создать сцену, в которой будет плиточный фон, поверх которого будут существовать доступные уровни, которые пользователь может выбрать, и он/она сможет панорамировать фон в порядке для просмотра всех уровней.Плиточный фон: не все спрайты появляются

Итак, как было предложено в iOS Games по учебникам, я создал SKNode *_backgroundLayer, в котором будут храниться все плитки, а также все, что будет дальше. Это позволило бы мне просто перемещать SKNode вокруг, и все его дети двигались вместе с ним. Отлично. Теперь мои плитки 450x450 pixels, поэтому я подсчитал, что мне понадобится 9 плит в моем _backgroundLayer, и я использовал код ниже, чтобы добавить их.

Что я не понимаю, так это: он загружает и позиционирует первые две плитки, которые должны появляться на моем экране, и, похоже, не загружает остальных! В «узлах x» в симуляторе говорится, что у него есть 2 узла, а не 9. Создает ли он узлы, а затем удаляет их, потому что они не находятся внутри моего экрана iphone изначально? Я не понимаю. Любые идеи о том, как это сделать и решить?

UPDATE: В моей iPad Retina я получаю 6 узлов вместо 9, так почему это только загрузка и хранение узлов, которые могут отображаться на экране, а не все из них, как я запрашиваю в коде ниже?

UPDATE2: NSLog (@ "% d", _backgroundLayer.children.count); возвращает 9 как следует. Я совершенно уверен, что я ошибаюсь в UIPanGestureRecognizer. Я перемещаю неправильный слой?

#import "LevelSelectScene.h" 
#import "TurtleWorldSubScene.h" 

@interface LevelSelectScene() 
@property (nonatomic, strong) SKSpriteNode *selectedNode; 
@end 

@implementation LevelSelectScene 
{ 
    SKNode *_backgroundLayer; 
} 

-(id)initWithSize:(CGSize)size { 
    if (self = [super initWithSize:size]) { 
     /* Setup your scene here */ 

     _backgroundLayer = [SKNode node]; 
     _backgroundLayer.name = @"backgroundLayer"; 
     [self addChild:_backgroundLayer]; 

     SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"levelSelect"]; 
     int textureID = 0; 

     for (int i = 0; i<3; i++) { 
      for (int j = 0; j<3; j++) { 

       SKSpriteNode *background = [SKSpriteNode spriteNodeWithTexture:backgroundTexture]; 

       background.anchorPoint = CGPointZero; 
       background.position = CGPointMake((background.size.width)*i, (background.size.height)*j); 
       background.zPosition = 0; 
       background.name = [NSString stringWithFormat:@"background%d", textureID]; 

       NSLog(@"x:%f, y:%f", background.position.x, background.position.y); 

       textureID++; 

       [_backgroundLayer addChild:background]; 
      } 
     } 

     NSLog(@"%d", _backgroundLayer.children.count); 

     //[TurtleWorldSubScene displayTurtleWorld:self]; 

    } 
    return self; 
} 

- (void)didMoveToView:(SKView *)view { 
    UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
    [[self view] addGestureRecognizer:gestureRecognizer]; 
} 

- (void)handlePan:(UIPanGestureRecognizer *)recognizer { 

    CGPoint translation = [recognizer translationInView:self.view]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

    if (recognizer.state == UIGestureRecognizerStateBegan) { 

    } else if (recognizer.state == UIGestureRecognizerStateChanged) { 

    } else if (recognizer.state == UIGestureRecognizerStateEnded) { 

    } 

} 
@end 

Спасибо!

ответ

0

Код в порядке. Количество узлов, подсчитываемых в метках отладки, относится к количеству нарисованных узлов, а не к общему числу в графе сцены. Проверьте фактическое количество узлов на _backgroundLayer.children.count.

+0

Но почему тогда, когда я панорамирую фоновый слой, я не вижу остальных спрайтов? Должен ли фоновый слой (sknode) быть чем-то вроде 1500x1500 пикселей, поскольку он содержит все эти 9 спрайтов? Я вижу черный фон вместо другого фонового спрайта. Я могу сделать что-то неправильно с панорамированием? Но я панорамирую фоновый слой. Я также загружу код. Есть идеи? Кстати, спасибо за ответ! –

+0

Что возвращает _backgroundLayer.children.count? Если он возвращает 9, то, возможно, по какой-то причине узлы просто не нарисованы (в правильном положении). Проверьте свойства: положение, zPosition, hidden, anchorPoint, xScale, yScale, размер кадра и размер для чего-то необычного. – LearnCocos2D

+0

UPDATE2: NSLog (@ "% d", _backgroundLayer.children.count); возвращает 9 как следует. Я совершенно уверен, что я ошибаюсь в UIPanGestureRecognizer. Я перемещаю неправильный слой? –