У меня в игре такие настройки:
- SKNode с именем _backgroundLayer
- Повторяющаяся текстура, которую я добавил в _backgroundLayer 9 раз, чтобы увеличить фон.
- SKSprite с именем levelButton, который добавляется к _backgroundLayer ([_backgroundLayer addChild:levelButton];).
Я использую levelButton.anchorPoint = CGPointMake(0.5, 0.5); чтобы у levelButton была точка привязки посередине. Теперь, когда я делаю levelButton.position = CGPointMake(0, 0); и _backgroundLayer.position = CGPointMake(0, 0); середина levelButton правильно расположена в (0, 0), а ее середина находится в левом нижнем углу экрана. Так что все в порядке. Однако, если я передвину levelButton на levelButton.position = CGPointMake(100, 0); и _backgroundLayer.position = CGPointMake(-100, 0); как показано ниже, levelButton по-прежнему должен иметь середину в (0,0), то есть в левом нижнем углу экрана. Однако это не так, и levelButton находится правее, примерно на 50 пикселей вправо. Но этого не должно быть, так как я перемещаю _backgroundLayer 100 влево (-100) и _levelButton 100 вправо (100). Он должен был остаться на месте.
Это основные вещи, которые я не понимаю, почему они не работают должным образом. Я, вероятно, делаю что-то не так, но я не могу найти это, хотя я прочитал iOS Games by Tutorials и кучу руководств и советов.
Пожалуйста помоги.
Теперь мой код следующий:
@implementation LevelSelectScene
{
SKNode *_backgroundLayer;
}
-(id)initWithSize:(CGSize)size {
/* Setup your scene here */
_backgroundLayer = [SKNode node];
_backgroundLayer.name = @"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];
textureID++;
[_backgroundLayer addChild:background];
}
}
[self addChild:_backgroundLayer];
SKSpriteNode * levelButton = [SKSpriteNode spriteNodeWithImageNamed:@"lock"];
levelButton.anchorPoint = CGPointMake(0.5, 0.5);
levelButton.position = CGPointMake(100, 0); //IMPORTANT
levelButton.zPosition = 150;
levelButton.name = @"test";
[_backgroundLayer addChild:levelButton];
_backgroundLayer.position = CGPointMake(-100, 0); //IMPORTANT
}
return self;
}