Я пытаюсь создать сцену, в которой будет плиточный фон, поверх которого будут существовать доступные уровни, которые пользователь может выбрать, и он/она сможет панорамировать фон в порядке для просмотра всех уровней.Плиточный фон: не все спрайты появляются
Итак, как было предложено в 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
Спасибо!
Но почему тогда, когда я панорамирую фоновый слой, я не вижу остальных спрайтов? Должен ли фоновый слой (sknode) быть чем-то вроде 1500x1500 пикселей, поскольку он содержит все эти 9 спрайтов? Я вижу черный фон вместо другого фонового спрайта. Я могу сделать что-то неправильно с панорамированием? Но я панорамирую фоновый слой. Я также загружу код. Есть идеи? Кстати, спасибо за ответ! –
Что возвращает _backgroundLayer.children.count? Если он возвращает 9, то, возможно, по какой-то причине узлы просто не нарисованы (в правильном положении). Проверьте свойства: положение, zPosition, hidden, anchorPoint, xScale, yScale, размер кадра и размер для чего-то необычного. – LearnCocos2D
UPDATE2: NSLog (@ "% d", _backgroundLayer.children.count); возвращает 9 как следует. Я совершенно уверен, что я ошибаюсь в UIPanGestureRecognizer. Я перемещаю неправильный слой? –